winform 中,怎样打印datagrid 中的数据? winform 中,怎样打印datagrid 中的数据?大家给些方法和代码吧, 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 给你一个类: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); } } } 开发适时候,如何尽量降低耦合度呢? 新手菜鸟问题 登陆窗体关闭后如何打开主窗体 请问两个关于DataGridView的问题 c#中一个小问题 急!历史曲线放大功能的问题!搞了好久还是不理想 GDI32.DLL API函数 MoveToEx 在C#2.0中的调用问题 访问数据的问题 求解决图片管理的问题(C#)急,在线等 制作qq2009登陆界面 求助!!! Windows资源管理器中,性能栏里,动态的CPU使用曲线如何绘制? 如何用C#或其他语言实现Excel中的Normsinv()函数?? 关于一个将int数组转化成字符数组的小函数
{
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);
} }
}