我想在winform下打印datagrid里的内容,可是,只能打印当前页,不知道该怎么判断分页,请各位大师帮帮忙,问题解决后马上结账,我的代码在下面:
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
try
{
Graphics g=e.Graphics;
lon=0;
wid=0;
this.Pw=this.printDocument1.DefaultPageSettings.PaperSize.Width; //打印的纸张宽度
this.Ph=this.printDocument1.DefaultPageSettings.PaperSize.Height; //纸张高度
this.Bm=this.printDocument1.DefaultPageSettings.Margins.Bottom; //下边距
this.Tm=this.printDocument1.DefaultPageSettings.Margins.Top;
this.Lm=this.printDocument1.DefaultPageSettings.Margins.Left;
this.Rm=this.printDocument1.DefaultPageSettings.Margins.Right;
this.Headhi=style.PreferredRowHeight;
SolidBrush hf=new SolidBrush(this.dataGrid1.HeaderForeColor);
SolidBrush hb=new SolidBrush(this.dataGrid1.HeaderBackColor);
SolidBrush tf=new SolidBrush(this.dataGrid1.ForeColor);
Pen pl=new Pen(Color.Black,1);
StringFormat cellfor=new StringFormat();
cellfor.Alignment=StringAlignment.Center;
Rectangle f=new Rectangle(0,0,0,0);
f.Offset(Tm,Lm); int[] rowhight=new int[this.ds.Tables["Person"].Rows.Count+1];
foreach(DataGridTextBoxColumn column in style.GridColumnStyles)
{
f.Height=Headhi;
f.Width=column.Width;
g.FillRectangle(hb,f);
f.Offset(0,3);
g.DrawString(column.HeaderText,this.dataGrid1.HeaderFont,hf,f,cellfor);
f.Offset(column.Width,-3);
}
lon+=Headhi;
rowhight[0]=Headhi;
int j=0;
foreach(DataGridTextBoxColumn column in style.GridColumnStyles)
{
f=new Rectangle(0,0,0,0);
f.Offset(Tm+wid,Lm+Headhi+5);
for(int i=0;i<this.ds.Tables["Person"].Rows.Count;i++)
{
f.Height=this.dataGrid1.GetCellBounds(i, 0).Height ;
f.Width=column.Width;
Object context=this.dataGrid1[i,j];
if(i%2!=0)
{
f.Offset(0,-5);
g.FillRectangle(new SolidBrush(style.AlternatingBackColor),f);
f.Offset(0,5);
}
g.DrawString(context.ToString(),this.dataGrid1.Font,tf,f,cellfor);
f.Offset(0,f.Height);
}
j++;
wid+=column.Width;
}
int lm=Lm;
for(int i=0;i<ds.Tables["Person"].Rows.Count;i++)
{
lon+=this.dataGrid1.GetCellBounds(i,0).Height;
rowhight[i+1]=dataGrid1.GetCellBounds(i,0).Height;
}
for(int i=0;i<=ds.Tables["Person"].Rows.Count+1;i++)
{ g.DrawLine(pl,Tm,lm,Tm+wid,lm);
if(i==ds.Tables["Person"].Rows.Count+1)
break;
lm+=rowhight[i];
}
int tm=Tm;
foreach(DataGridTextBoxColumn column in style.GridColumnStyles)
{
g.DrawLine(pl,tm,Lm,tm,Lm+lon);
tm+=column.Width;
}
g.DrawLine(pl,tm,Lm,tm,Lm+lon);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
try
{
Graphics g=e.Graphics;
lon=0;
wid=0;
this.Pw=this.printDocument1.DefaultPageSettings.PaperSize.Width; //打印的纸张宽度
this.Ph=this.printDocument1.DefaultPageSettings.PaperSize.Height; //纸张高度
this.Bm=this.printDocument1.DefaultPageSettings.Margins.Bottom; //下边距
this.Tm=this.printDocument1.DefaultPageSettings.Margins.Top;
this.Lm=this.printDocument1.DefaultPageSettings.Margins.Left;
this.Rm=this.printDocument1.DefaultPageSettings.Margins.Right;
this.Headhi=style.PreferredRowHeight;
SolidBrush hf=new SolidBrush(this.dataGrid1.HeaderForeColor);
SolidBrush hb=new SolidBrush(this.dataGrid1.HeaderBackColor);
SolidBrush tf=new SolidBrush(this.dataGrid1.ForeColor);
Pen pl=new Pen(Color.Black,1);
StringFormat cellfor=new StringFormat();
cellfor.Alignment=StringAlignment.Center;
Rectangle f=new Rectangle(0,0,0,0);
f.Offset(Tm,Lm); int[] rowhight=new int[this.ds.Tables["Person"].Rows.Count+1];
foreach(DataGridTextBoxColumn column in style.GridColumnStyles)
{
f.Height=Headhi;
f.Width=column.Width;
g.FillRectangle(hb,f);
f.Offset(0,3);
g.DrawString(column.HeaderText,this.dataGrid1.HeaderFont,hf,f,cellfor);
f.Offset(column.Width,-3);
}
lon+=Headhi;
rowhight[0]=Headhi;
int j=0;
foreach(DataGridTextBoxColumn column in style.GridColumnStyles)
{
f=new Rectangle(0,0,0,0);
f.Offset(Tm+wid,Lm+Headhi+5);
for(int i=0;i<this.ds.Tables["Person"].Rows.Count;i++)
{
f.Height=this.dataGrid1.GetCellBounds(i, 0).Height ;
f.Width=column.Width;
Object context=this.dataGrid1[i,j];
if(i%2!=0)
{
f.Offset(0,-5);
g.FillRectangle(new SolidBrush(style.AlternatingBackColor),f);
f.Offset(0,5);
}
g.DrawString(context.ToString(),this.dataGrid1.Font,tf,f,cellfor);
f.Offset(0,f.Height);
}
j++;
wid+=column.Width;
}
int lm=Lm;
for(int i=0;i<ds.Tables["Person"].Rows.Count;i++)
{
lon+=this.dataGrid1.GetCellBounds(i,0).Height;
rowhight[i+1]=dataGrid1.GetCellBounds(i,0).Height;
}
for(int i=0;i<=ds.Tables["Person"].Rows.Count+1;i++)
{ g.DrawLine(pl,Tm,lm,Tm+wid,lm);
if(i==ds.Tables["Person"].Rows.Count+1)
break;
lm+=rowhight[i];
}
int tm=Tm;
foreach(DataGridTextBoxColumn column in style.GridColumnStyles)
{
g.DrawLine(pl,tm,Lm,tm,Lm+lon);
tm+=column.Width;
}
g.DrawLine(pl,tm,Lm,tm,Lm+lon);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货