2015-02-06 73 views
0

我有一个datagrid的信息,当点击打印按钮 我想显示一个打印预览屏幕,看起来会是什么样,然后 让用户打印文档。继承人我到目前为止:C#预览打印对话框

 PrintDocument myDocument = new PrintDocument(); 


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

我的问题是如何获取数据到预览屏幕..谢谢!

+0

您的问题解决了吗? – TaW 2015-02-12 15:28:24

回答

1

您需要添加PrintPage事件:

myDocument.DocumentName = "Test2015"; 
myDocument.PrintPage += myDocument_PrintPage; 

,你需要编写它!在其非常简单的形式,这将dump出来的数据:

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,这些硬编码仅用于测试。您可以使用cell.FormattedValue而不是原始的Value

  • 你可能要准备几Fonts您将使用前加上一个标题,也许一个标志DGV ..

也是值得考虑的是设置Unit的东西与设备无关的像mm

e.Graphics.PageUnit = GraphicsUnit.Millimeter; 

而且,如果需要的话,你应该跟踪的垂直位置的,所以你可以添加页码和认识,当页面已满!

更新:由于您的DGV可能包含空单元格我添加了一个支票null

+0

下载者是否会关注评论?感谢__not__帮助改善! – TaW 2015-02-08 15:59:05

+0

感谢您写信给我的其他问题。在dataGridView中什么也没有。 – John 2015-02-09 14:17:57

+0

那就是问题了。我已经看过它;在那里看到我的答案! – TaW 2015-02-09 15:21:50