首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#预览打印对话框

C#预览打印对话框
EN

Stack Overflow用户
提问于 2015-02-06 14:53:51
回答 1查看 534关注 0票数 0

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

代码语言:javascript
复制
        PrintDocument myDocument = new PrintDocument();


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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-08 08:09:21

您需要添加PrintPage事件:

代码语言:javascript
复制
myDocument.DocumentName = "Test2015";
myDocument.PrintPage += myDocument_PrintPage;

你需要对它进行编码!在它最简单的形式中,它会将数据转储出去:

代码语言:javascript
复制
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这样的设备:

代码语言:javascript
复制
e.Graphics.PageUnit = GraphicsUnit.Millimeter;

如果需要的话,你应该跟踪垂直位置,这样你就可以添加页码并识别页面何时满了!

更新:,因为您的DGV可能包含空单元格,所以我添加了一个null检查。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28368453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档