0

複数列のリストボックスで受け取ったすべてのデータを表示します。印刷ボタンをクリックすると、リストボックス内のすべてのデータレビューが印刷されます。

これは私のコードです:

1.最初に、ユーザーは ID に基づいてキーワードを検索します。次に、複数列のリストビューに表示されます。このデータはxmlファイルで検索されます。

XmlDocument xml = new XmlDocument();
xml.Load("C:\\Users\\HDAdmin\\Documents\\Fatty\\SliceEngine\\SliceEngine\\bin\\Debug\\patient.xml");
XmlNodeList xnList = xml.SelectNodes("/main/patient");
foreach (XmlNode xn in xnList)
{
    string date = xn.OfType<XmlNode>().FirstOrDefault(n => n.Name == "Date").FirstChild.Value;
    string id = xn.OfType<XmlNode>().FirstOrDefault(n => n.Name == "ID").FirstChild.Value;
    if (date == cari)
    {
       listviewitem = new ListViewItem(date);
       listviewitem.SubItems.Add("Smith");
       this.listView1.Items.Add(listviewitem);
    }
       if (id == cari)
       {                    
           listviewitem = new ListViewItem(date);

           id = xn.OfType<XmlNode>().FirstOrDefault(n => n.Name == "ID").FirstChild.Value;
           listviewitem.SubItems.Add(id);

           string level = xn.OfType<XmlNode>().FirstOrDefault(n => n.Name == "Level").FirstChild.Value;
           listviewitem.SubItems.Add(level);

           string name = xn.OfType<XmlNode>().FirstOrDefault(n => n.Name == "Name").FirstChild.Value;                    
           listviewitem.SubItems.Add(name);

2.同じ方法で、印刷イベントボタンを追加します

    this.components = new System.ComponentModel.Container();
    this.printBut = new System.Windows.Forms.Button();
    this.ClientSize = new System.Drawing.Size(504, 381);
    this.Text = "Print Example";

    printBut.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;               
    printBut.Location = new System.Drawing.Point(32, 110);
    printBut.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
    printBut.TabIndex = 0;
    printBut.Text = "Print the file.";
    printBut.Size = new System.Drawing.Size(136, 40);
    printBut.Click += new System.EventHandler(printBut_Click);

    this.Controls.Add(printBut);
    //-------------print-----------------

3.これは printBut_click です。

private void printBut_Click(object sender, EventArgs e)
    {
        try
        {
            StreamReader streamToPrint = new StreamReader("C:\\Users\\HDAdmin\\Documents\\Fatty\\SliceEngine\\SliceEngine\\bin\\Debug\\aboutREPCS.txt");

            try
            {
                printFont = new Font("Arial", 10);
                pd = new PrintDocument();
                pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);                       
                pd.Print();
            }
            finally
            {
                streamToPrint.Close();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

4.これは printPage イベントです

// The PrintPage event is raised for each page to be printed.
private void pd_PrintPage(object sender, PrintPageEventArgs ev)
    {
        float linesPerPage = 0;
        float yPos = 0;
        int count = 0;
        float leftMargin = ev.MarginBounds.Left;
        float topMargin = ev.MarginBounds.Top;
        string line = null;

        // Calculate the number of lines per page.
        linesPerPage = ev.MarginBounds.Height /
           printFont.GetHeight(ev.Graphics);

        // Print each line of the file.
        while (count < linesPerPage &&
           ((line = streamToPrint.ReadLine()) != null))
        {
            yPos = topMargin + (count *
               printFont.GetHeight(ev.Graphics));
            ev.Graphics.DrawString(line, printFont, Brushes.Black,
               leftMargin, yPos, new StringFormat());
            count++;
        }

        // If more lines exist, print another page.
        if (line != null)
            ev.HasMorePages = true;
        else
            ev.HasMorePages = false;
    }

このコードを実行すると、表示されますobject reference not set to an instance of an objectここに画像の説明を入力

というわけで、今回の申請の流れをもう一度。

User insert keyword.
If keyword match, view data from xml file into multicolumn listview.
printBut will print all the data view in listview.
4

0 に答える 0