【问题标题】:Print Multiple Pages from SqlServer Database using C# PrintDocuments使用 C# 打印文档从 Sql Server 数据库打印多个页面
【发布时间】:2020-10-22 05:28:19
【问题描述】:

我有一个包含 300 多条记录的数据库表,我想使用 PrintDocument/PrintPreview 打印它,但问题是 printPreview 中只显示一页,其余记录丢失我的代码如下,请帮助我。

    private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
         int valueYPos=80;
         int valueXPos=20
         string classId=1;
            con.SqlQuery("select [RollNo],[Name] from [dbo].[StudentRegistration] where [ClassId]='" 
            + classId + "'");
            con.ExQuery();
            foreach (DataRow item in con.ExQuery().Rows)
            {
                e.Graphics.DrawString("RollNo" +item[0].ToString(), new Font("Arial", 20, 
                        FontStyle.Bold), Brushes.Black, new Point(valueXPos, valueYPos));
                e.Graphics.DrawString("RollNo" +item[1].ToString(), new Font("Arial", 20, 
                     FontStyle.Bold), Brushes.Black, new Point(valueXPos+20, valueYPos));
                valueYPos +=20;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            PrintPreviewDialog pPD = new PrintPreviewDialog();
            pPD.Document = printDocument1;
            pPD.ShowDialog();
        }

【问题讨论】:

    标签: c# printing printdocument print-preview


    【解决方案1】:

    对于打印预览对话框,请参阅此答案Showing Print Preview in C#

    首先你不能像那样访问数据,因为它会在尝试打印每一页时尝试访问数据。

                private int pageNo = 1;
    
                private static void Print_Invoice(object sender, PrintPageEventArgs e)
                {
                    int valueYPos=80;
                    int valueXPos=20
                    string classId=1;
                    con.SqlQuery("select [RollNo],[Name] from [dbo].[StudentRegistration] where [ClassId]='"+ classId + "'");
                    con.ExQuery();
    
                    switch (pageNo)
                    {
                        case 1:
                            //Print some Data
                            e.HasMorePages = true;
                            break;
                        case 2:
                           //Print some Data
                           e.HasMorePages = true;
                           break;
                        case 3:
                           //Print some Data
                           e.HasMorePages = false;
                           break;
                        default:
                           e.HasMorePages = false;
                           break;
                    }
    
                    pageNo++;
                    
                }
    

    希望解决您的问题

    【讨论】:

    • 先生,我必须打印资产负债表报告,其中数据将来自多个表和不同的结构,这是不可能存储在一个 datagridview 中的。
    • 会有一个循环或者你会逐行打印,主要是检查你的 valueYPos 如果它超过页面高度然后设置 e.HasMorePages = true 否则设置 e.HasMorepages = false,但你不能使用foreach循环,你可以使用页码计数器在第1页和第2页和第3页打印特定数据,依此类推
    • 编辑了我的答案
    猜你喜欢
    • 2015-08-07
    • 2014-11-21
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多