C#预览打印对话框

时间:2015-02-06 14:53:51

标签: c# visual-studio-2012 printing

我有一个信息数据网格,点击打印按钮 我想显示一个打印预览屏幕,然后显示它的样子 让用户打印文档。这是我到目前为止所得到的:

        PrintDocument myDocument = new PrintDocument();


        PrintPreviewDialog PrintPreviewDialog1 = new PrintPreviewDialog();
        PrintPreviewDialog1.Document = myDocument;
        PrintPreviewDialog1.ShowDialog();

我的问题是如何将数据放到预览屏幕上..谢谢!

1 个答案:

答案 0 :(得分:1)

您需要添加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()方法找出一大块文本的大小来优化coodinates,这些coodinates仅用于此处的测试。

  • 您可以使用cell.FormattedValue代替原始Value

  • 您可能需要准备一些您将使用的Fonts,在dgv前加上标题,可能是徽标..

另外值得考虑的是将Unit设置为与mm无关的设备:

e.Graphics.PageUnit = GraphicsUnit.Millimeter;

并且,如果需要,您应该跟踪垂直位置,以便您可以添加页码并识别页面已满!

更新:由于您的DGV可能包含空单元格,因此我添加了对null的检查。