C#打印问题 - 打印datagridview数据 - 打印速度减慢2,3,4倍--Windows Form

时间:2015-11-06 06:44:40

标签: c# windows winforms printing datagridview

我填写datagridview然后我从那里打印出一些额外的修复字符串字段列表。前两个印刷快速完成但在3-4之后非常缓慢(有时它会冻结)。

我认为有些缓冲区或某些内容已经填满,我必须清空它但是怎么样?如果我试图通过pdf打印机打印,第一个文件大小是正常的〜200KB秒是1MB,第三个是4-6MB,第四个是如此之大,它是冻结。

最多只有一页两页长列表。有人可以帮我找到问题并提供更多解决方案吗?

private void button1_Click(object sender, EventArgs e)
{
        printDocument1.Print();
}

打印按钮

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
        Bitmap bmp = Properties.Resources.ugro;
        Image newImage = bmp;
        e.Graphics.DrawImage(newImage, 700, 20, 100, 100);

        Bitmap bmp1 = Properties.Resources.line_1;
        Image newImage1 = bmp1;
        e.Graphics.DrawImage(newImage1, 20, 80, 700, 1);



        e.Graphics.DrawString("Text", new Font("Arial", 12, FontStyle.Bold), Brushes.Black, new Point(280, 20));
        e.Graphics.DrawString(lbl_datum.Text, new Font("Arial", 8, FontStyle.Bold), Brushes.Black, new Point(20, 20));
        // e.Graphics.DrawString("Text:", new Font("Arial", 12, FontStyle.Bold), Brushes.Black, new Point(20, 100));

        //e.Graphics.DrawString(txt_BID.Text, new Font("Arial", 12, FontStyle.Bold), Brushes.Black, new Point(160, 80));
        //e.Graphics.DrawString(txt_ID.Text, new Font("Arial", 12, FontStyle.Bold), Brushes.Black, new Point(160, 100));

        DataGridViewCell cell = null;

        foreach (DataGridViewCell selectedCell in dataGridView1.SelectedCells)
        {
            cell = selectedCell;
            break;
        }

        if (cell != null)
        {
            DataGridViewRow row = cell.OwningRow;

        }

        e.Graphics.DrawString("Name", new Font("Arial", 10, FontStyle.Bold), Brushes.Black, new Point(40, 60));
        e.Graphics.DrawString("Height(cm)", new Font("Arial", 10, FontStyle.Bold), Brushes.Black, new Point(150, 60));
        e.Graphics.DrawString("Weight(kg)", new Font("Arial", 10, FontStyle.Bold), Brushes.Black, new Point(280, 60));
        e.Graphics.DrawString("Text(cm)", new Font("Arial", 10, FontStyle.Bold), Brushes.Black, new Point(410, 60));

        int height = 0;
        //int width = 0;

        //e.Graphics.FillRectangle(Brushes.DarkGray,new Rectangle(100,100,dataGridView1.Columns[0].Width,dataGridView1.Rows[0].Height));

        //  e.Graphics.DrawString(dataGridView1.Columns[0].HeaderText.ToString(), new Font("Arial", 12, FontStyle.Bold), Brushes.Black, new Rectangle(420, 80, dataGridView1.Columns[0].Width,dataGridView1.Rows[1].Height));
        height = 80;

        while (i < dataGridView1.Rows.Count)
        {
            if (height > e.MarginBounds.Height)
            {
                e.HasMorePages = true;
                return;
            }

            height += 20;

            //e.Graphics.DrawString(dataGridView1.Rows[i].Cells[0].FormattedValue.ToString(), dataGridView1.Font, Brushes.Black, new Rectangle(20, height, dataGridView1.Columns[0].Width, 20));

            e.Graphics.DrawString(dataGridView1.Rows[i].Cells[0].FormattedValue.ToString(), dataGridView1.Font, Brushes.Black, new Rectangle(20, height, dataGridView1.Columns[0].Width+50, 40));

            string sign = String.Format("_____________");

            e.Graphics.DrawString(sign, dataGridView1.Font, Brushes.Black, new Rectangle(150, height, dataGridView1.Columns[0].Width + 100, 40));
            e.Graphics.DrawString(sign, dataGridView1.Font, Brushes.Black, new Rectangle(280, height, dataGridView1.Columns[0].Width + 100, 40));
            e.Graphics.DrawString(sign, dataGridView1.Font, Brushes.Black, new Rectangle(410, height, dataGridView1.Columns[0].Width + 100, 40));

            i++;

            printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
        }

        i = 0;
}

哪个变量导致了我的问题?

0 个答案:

没有答案