winform 中,怎样打印datagrid 中的数据?大家给些方法和代码吧,

解决方案 »

  1.   

    给你一个类:public class DatagridPrint
    {
    private DataGrid dataGrid;
    private PrintDocument printDocument;
    private PageSetupDialog pageSetupDialog;
    private PrintPreviewDialog printPreviewDialog; public DatagridPrint(DataGrid dg)

    this.dataGrid = dg;
    printDocument = new PrintDocument();
    printDocument.PrintPage += new PrintPageEventHandler(this.printDocument_PrintPage);
    }  private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {   
    int rowCount = 0;
    int colCount = 0;
    int x = 0;
    int y = 0;
    int rowGap = 20;
    int colGap = 5;
    int leftMargin = 50;
    Font font = new Font("Arial", 10);
    Font headingFont = new Font("Arial", 11, FontStyle.Underline);
    Font captionFont = new Font("Arial", 10, FontStyle.Bold); 
    Brush brush = new SolidBrush(Color.Black);
    string cellValue = ""; if(dataGrid.DataSource.GetType().ToString() == "System.Data.DataSet")
    {
    rowCount = dataGrid.VisibleRowCount;
    }
    else if(dataGrid.DataSource.GetType().ToString() == "System.Collections.ArrayList")
    {
    rowCount = ((ArrayList)dataGrid.DataSource).Count;
    }
    colCount = dataGrid.VisibleColumnCount; //print caption
    if(dataGrid.CaptionVisible)
    {
    y += rowGap;
    x = leftMargin;
    e.Graphics.DrawString(dataGrid.CaptionText, captionFont, brush, x, y);
    } //print headings 
    y += rowGap;
    x = leftMargin;
    //MessageBox.Show(rowCount.ToString());
    //MessageBox.Show(colCount.ToString());
    for(int j = 0; j < colCount; j++)
    {
    if(dataGrid.TableStyles[0].GridColumnStyles[j].Width > 0)
    {
    cellValue = dataGrid.TableStyles[0].GridColumnStyles[j].HeaderText; 
    e.Graphics.DrawString(cellValue, headingFont, brush, x, y);
    x += dataGrid.TableStyles[0].GridColumnStyles[j].Width + colGap; 
    }
    }  //print all rows
    for(int i = 0; i < rowCount; i++)
    {
    y += rowGap;
    x = leftMargin;
    for(int j = 0; j < colCount; j++)
    {
    if(dataGrid.TableStyles[0].GridColumnStyles[j].Width > 0)
    {
    cellValue = dataGrid[i,j].ToString(); 
    e.Graphics.DrawString(cellValue,font, brush, x, y);
    x += dataGrid.TableStyles[0].GridColumnStyles[j].Width + colGap;
    y = y + rowGap * (cellValue.Split(new char[] {' ', ' '}).Length - 1); 
    }

    }

    } public PrintDocument GetPrintDocument()
    {
    return printDocument;
    } public void Print()
    {
    try
    {
    pageSetupDialog = new PageSetupDialog();
    pageSetupDialog.Document = printDocument;
    pageSetupDialog.ShowDialog();
    printPreviewDialog = new PrintPreviewDialog();
    printPreviewDialog.Document = printDocument;
    printPreviewDialog.Height = 600;
    printPreviewDialog.Width = 800;
    printPreviewDialog.ShowDialog();
    }
    catch(Exception e)
    {
    throw new Exception("Printer error." + e.Message);
    } }
    }