Csharp/C#教程:打印多个datagridview页面分享


打印多个datagridview页面

我想打印我的DataGridView内容,但是当我在这个DataGridView有很多行时,我不知道如何使用HasMorePages属性。

这是我目前的代码:

 private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { foreach (DataGridViewRow sor in dataGridView1.Rows) { foreach (DataGridViewColumn oszlop in dataGridView1.Columns) { szelesseg += oszlop.Width; e.Graphics.DrawRectangle(Pens.Brown, szelesseg, magassag, oszlop.Width, sor.Height); szelesseg_lista.Add(szelesseg); magassag_lista.Add(magassag); } foreach (DataGridViewCell cella in sor.Cells) { ertekek.Add(cella.Value.ToString()); } szelesseg = 10; magassag = magassag + sor.Height; cella_magassag += sor.Height; } int sor_db = ertekek.Count; for (int i = 0; i < sor_db; i++) { e.Graphics.DrawString(ertekek[i], new Font(FontFamily.GenericMonospace, 12, FontStyle.Regular), new SolidBrush(Color.Red), szelesseg_lista[i], magassag_lista[i]); } } 

PrintPage事件适用于您要打印的每个页面 。 这意味着你的For …每个循环都不起作用,因为你告诉打印机打印当前页面上的所有内容。

您必须在PrintPage方法范围之外有一个变量来跟踪您当前所在的行索引:

 int printIndex; private void printDocument1_PrintPage(object sender, PrintPageEventArgs e) { int y = 0; while (printIndex < dataGridView1.Rows.Count && y + dataGridView1.Rows[printIndex].Height < e.MarginBounds.Height) { // print your stuff, y is where you are on the page vertically y += dataGridView1.Rows[printIndex].Height; ++printIndex; } e.HasMorePages = printIndex < dataGridView1.Rows.Count; } 

使用BeginPrint事件重置printIndex值:

 private void printDocument1_BeginPrint(object sender, PrintEventArgs e) { printIndex = 0; } 

如果添加另一个变量,例如int printPage; ,您现在可以通过在PrintPage事件中递增该值来了解您当前正在打印的页面。

试试这个方法

将此方法添加到您的cs页面

上述就是C#学习教程:打印多个datagridview页面分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!

 protected override PageStatePersister PageStatePersister { get { return new SessionPageStatePersister(this); } } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/952104.html

(0)
上一篇 2021年11月19日
下一篇 2021年11月19日

精彩推荐