複数列のリストボックスで受け取ったすべてのデータを表示します。印刷ボタンをクリックすると、リストボックス内のすべてのデータレビューが印刷されます。
これは私のコードです:
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.