在c#里有printPreviewDialog、printDocument两个控件,可是怎么使用呢?我现在想打印一个窗体里DataGridView里的所有内容,可不知道怎么操作,我不想用水晶报表。其中可能数据量很大,需要要用到分页。希望哪位高人指点一下。

解决方案 »

  1.   

    如果使用printDocument来打印 可以在PrintPage事件里处理     System.Drawing.Printing.PrintDocument _Document = new System.Drawing.Printing.PrintDocument();
                _Document.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(_Document_PrintPage);        void _Document_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
            {
                e.Graphics.DrawString("AAA", this.Font, Brushes.Yellow, 20, 20);
            }
      

  2.   

    这样可以打印datagridview里的内容吧?
      

  3.   

    再把代码帖一下:private void button2_Click(object sender, EventArgs e)
    {
    PrintPreviewDialog pd = new PrintPreviewDialog();
    pd.Document = new PrintDocument();
    pd.Document.PrintPage += new PrintPageEventHandler(Document_PrintPage);
    pd.Document.QueryPageSettings += new QueryPageSettingsEventHandler(Document_QueryPageSettings);
    pd.Document.BeginPrint += new PrintEventHandler(Document_BeginPrint);
    if (pd.ShowDialog(this) == DialogResult.OK)
    {
    }
    }void Document_QueryPageSettings(object sender, QueryPageSettingsEventArgs e)
    {
    e.PageSettings.Landscape = true;
    int index = -1;
    for (int i=0;i<e.PageSettings.PrinterSettings.PaperSizes.Count;i++)
    {
    if (e.PageSettings.PrinterSettings.PaperSizes[i].PaperName== "A4")
    {
    index=i;
    break;
    }
    }
    if (index != -1)
    {
    e.PageSettings.PaperSize = e.PageSettings.PrinterSettings.PaperSizes[index];
    }
    }void Document_BeginPrint(object sender, PrintEventArgs e)
    {
    }
    int i = 0;
    void Document_PrintPage(object sender, PrintPageEventArgs e)
    {
    //e.Graphics.DrawString("测试", this.Font, SystemBrushes.ControlText, Rectangle.FromLTRB(10, 10, 80, 80));
    //e.HasMorePages = i<10;
    //i++;
    }
      

  4.   

    http://blog.csdn.net/luckisok/archive/2008/05/08/2414396.aspx