C# 预览打印对话框
C# Preview Print Dialog
我有一个信息数据网格,单击打印按钮时
我想展示它的外观打印预览屏幕,然后
让用户打印文档。这是我到目前为止得到的:
PrintDocument myDocument = new PrintDocument();
PrintPreviewDialog PrintPreviewDialog1 = new PrintPreviewDialog();
PrintPreviewDialog1.Document = myDocument;
PrintPreviewDialog1.ShowDialog();
我的问题是如何将数据放到预览屏幕上。谢谢!
您需要添加 PrintPage
事件:
myDocument.DocumentName = "Test2015";
myDocument.PrintPage += myDocument_PrintPage;
并且您需要对其进行编码!在最简单的形式中,这将转储数据:
void myDocument_PrintPage(object sender, PrintPageEventArgs e)
{
foreach(DataGridViewRow row in dataGridView1.Rows)
foreach(DataGridViewCell cell in row.Cells)
{
if (Cell.Value != null)
e.Graphics.DrawString(cell.Value.ToString(), Font, Brushes.Black,
new Point(cell.ColumnIndex * 123, cell.RowIndex * 12 ) );
}
}
但是当然你会想要添加更多以获得漂亮的格式等。
例如,您可以使用 Graphics.MeasureString()
方法找出一大块文本的大小来优化坐标,这些坐标是硬编码的,只是为了在这里进行测试。
您可以使用 cell.FormattedValue
而不是原始的 Value
。
你可能想准备一些你会用到的Fonts
,在dgv前加一个header,或者一个标志..
另外值得考虑的是将 Unit
设置为独立于设备的东西,例如 mm
:
e.Graphics.PageUnit = GraphicsUnit.Millimeter;
并且,如果需要,您应该跟踪垂直位置,以便您可以添加页码并识别页面何时已满!
更新: 由于您的 DGV
可能包含空单元格,我添加了对 null
.
的检查
我有一个信息数据网格,单击打印按钮时 我想展示它的外观打印预览屏幕,然后 让用户打印文档。这是我到目前为止得到的:
PrintDocument myDocument = new PrintDocument();
PrintPreviewDialog PrintPreviewDialog1 = new PrintPreviewDialog();
PrintPreviewDialog1.Document = myDocument;
PrintPreviewDialog1.ShowDialog();
我的问题是如何将数据放到预览屏幕上。谢谢!
您需要添加 PrintPage
事件:
myDocument.DocumentName = "Test2015";
myDocument.PrintPage += myDocument_PrintPage;
并且您需要对其进行编码!在最简单的形式中,这将转储数据:
void myDocument_PrintPage(object sender, PrintPageEventArgs e)
{
foreach(DataGridViewRow row in dataGridView1.Rows)
foreach(DataGridViewCell cell in row.Cells)
{
if (Cell.Value != null)
e.Graphics.DrawString(cell.Value.ToString(), Font, Brushes.Black,
new Point(cell.ColumnIndex * 123, cell.RowIndex * 12 ) );
}
}
但是当然你会想要添加更多以获得漂亮的格式等。
例如,您可以使用
Graphics.MeasureString()
方法找出一大块文本的大小来优化坐标,这些坐标是硬编码的,只是为了在这里进行测试。您可以使用
cell.FormattedValue
而不是原始的Value
。你可能想准备一些你会用到的
Fonts
,在dgv前加一个header,或者一个标志..
另外值得考虑的是将 Unit
设置为独立于设备的东西,例如 mm
:
e.Graphics.PageUnit = GraphicsUnit.Millimeter;
并且,如果需要,您应该跟踪垂直位置,以便您可以添加页码并识别页面何时已满!
更新: 由于您的 DGV
可能包含空单元格,我添加了对 null
.