【发布时间】:2014-07-31 22:29:37
【问题描述】:
我有一个带有DataTable 的应用程序,我需要将DataTable 中的每一行打印到一个单独的页面上,我正费了好大的劲才让它工作。我发现了很多与打印多页和打印DataGridViews相关的帖子,但我找不到任何关于将DataTable中的每一行打印到单独的页面.
不管怎样,这是我迄今为止整理的内容,但效果不佳。
private void btnPrint_Click(object sender, EventArgs e)
{
printTag.DefaultPageSettings.Landscape = true;
PrintPreviewDialog preview = new PrintPreviewDialog();
preview.Document = printTag;
preview.Show();
}
private void printTag_PrintPage(System.Object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
PrintRow = 0;
//Here I set my Fonts, String Formats and Pen Styles
int maxRows = _dtTags.Rows.Count;
for (int lines = 0; lines < maxRows; ++lines)
{
PrintRow++;
if (PrintRow >= _dtTags.Rows.Count)
{
e.HasMorePages = PrintRow < _dtTags.Rows.Count;
return; //Done Printing
}
var row = _dtTags.Rows[PrintRow];
//Pass data from current Row of DataTable to variables which are used to populate the e.Graphic
jobNum = _dsTags.Tables["Paint Tags"].Rows[lines].Field<string>("Job");
machInfo = _dsTags.Tables["Paint Tags"].Rows[lines].Field<string>("Job Desc");
jobNote = _dsTags.Tables["Paint Tags"].Rows[lines].Field<string>("Job Note");
color = _dsTags.Tables["Paint Tags"].Rows[lines].Field<string>("Color");
parts = _dsTags.Tables["Paint Tags"].Rows[lines].Field<string>("Parts");
empName = _dsTags.Tables["Paint Tags"].Rows[lines].Field<string>("Employee");
//Here my e.Graphic is created, located and filled out
}
}
所以,这就是上面代码的作用:
- 如果我的表格只有一行,打印预览会显示为空白。
- 如果我的表格不止一行,则不会打印最后一行。
- 表格中的每一行(最后一行除外,如果只有一行)打印在同一页上。
所以基本上我的预览看起来就像我将同一张纸多次送入打印机并在上面打印。
我们将不胜感激任何有关使其发挥作用的帮助或建议。
【问题讨论】:
标签: c# printing datagridview datatable printdocument