public
class
PrintFunction
... {
publicStringprintName=String.Empty;
publicFontprtTextFont=newFont("Verdana",10);
publicFontprtTitleFont=newFont("宋体",10);
privateString[]titles=newString[0];
publicString[]Titles
...{
set
...{
titles=valueasString[];
if(null==titles)
...{
titles=newString[0];
}
}
get
...{
returntitles;
}
}
privateInt32left=20;
privateInt32top=20;
publicInt32Top
...{
set
...{
top=value;
}
get
...{
returntop;
}
}
publicInt32Left
...{
set
...{
left=value;
}
get
...{
returnleft;
}
}
privateDataTableprintedTable;
privateInt32pheight;
privateInt32pWidth;
privateInt32pindex;
privateInt32curdgi;
privateInt32[]width;
privateInt32rowOfDownDistance=3;
privateInt32rowOfUpDistance=2;
publicBooleanPrintDataTable(DataTabletable)
...{
PrintDocumentprtDocument=newPrintDocument();
try
...{
if(printName!=String.Empty)
...{
prtDocument.PrinterSettings.PrinterName=printName;
}
prtDocument.DefaultPageSettings.Landscape=true;
prtDocument.OriginAtMargins=false;
PrintDialogprtDialog=newPrintDialog();
prtDialog.AllowSomePages=true;
prtDialog.ShowHelp=false;
prtDialog.Document=prtDocument;
if(DialogResult.OK!=prtDialog.ShowDialog())
...{
returnfalse;
}
printedTable=table;
pindex=0;
curdgi=0;
width=newInt32[printedTable.Columns.Count];
pheight=prtDocument.PrinterSettings.DefaultPageSettings.Bounds.Bottom;
pWidth=prtDocument.PrinterSettings.DefaultPageSettings.Bounds.Right;
prtDocument.PrintPage+=newPrintPageEventHandler(Document_PrintPage);
prtDocument.Print();
}
catch(InvalidPrinterExceptionex)
...{
MessageBox.Show("没有安装打印机");
}
catch(Exceptionex)
...{
MessageBox.Show("打印错误");
}
prtDocument.Dispose();
returntrue;
}
Int32startColumnControls=0;
Int32endColumnControls=0;
privatevoidDocument_PrintPage(objectsender,PrintPageEventArgsev)
...{
Int32x=left;
Int32y=top;
Int32rowOfTop=top;
Int32i;
Penpen=newPen(Brushes.Black,1);
if(0==pindex)
...{
for(i=0;i<titles.Length;i++)
...{
ev.Graphics.DrawString(titles[i],prtTitleFont,Brushes.Black,left,y+rowOfUpDistance);
y+=prtTextFont.Height+rowOfDownDistance;
}
rowOfTop=y;
foreach(DataRowdrinprintedTable.Rows)
...{
for(i=0;i<printedTable.Columns.Count;i++)
...{
Int32colwidth=Convert.ToInt16(ev.Graphics.MeasureString(dr[i].ToString().Trim(),prtTextFont).Width);
if(colwidth>width[i])
...{
width[i]=colwidth;
}
}
}
}
for(i=endColumnControls;i<printedTable.Columns.Count;i++)
...{
Stringheadtext=printedTable.Columns[i].ColumnName.Trim();
if(pindex==0)
...{
intcolwidth=Convert.ToInt16(ev.Graphics.MeasureString(headtext,prtTextFont).Width);
if(colwidth>width[i])
...{
width[i]=colwidth;
}
}
if(x+width[i]>pheight)
...{
break;
}
ev.Graphics.DrawString(headtext,prtTextFont,Brushes.Black,x,y+rowOfUpDistance);
x+=width[i];
}
startColumnControls=endColumnControls;
if(i<printedTable.Columns.Count)
...{
endColumnControls=i;
ev.HasMorePages=true;
}
else
...{
endColumnControls=printedTable.Columns.Count;
}
ev.Graphics.DrawLine(pen,left,rowOfTop,x,rowOfTop);
y+=rowOfUpDistance+prtTextFont.Height+rowOfDownDistance;
ev.Graphics.DrawLine(pen,left,y,x,y);
for(i=curdgi;i<printedTable.Rows.Count;i++)
...{
x=left;
for(Int32j=startColumnControls;j<endColumnControls;j++)
...{
ev.Graphics.DrawString(printedTable.Rows[i][j].ToString().Trim(),prtTextFont,Brushes.Black,x,y+rowOfUpDistance);
x+=width[j];
}
y+=rowOfUpDistance+prtTextFont.Height+rowOfDownDistance;
ev.Graphics.DrawLine(pen,left,y,x,y);
if(y>pWidth-prtTextFont.Height-30)
...{
break;
}
}
ev.Graphics.DrawLine(pen,left,rowOfTop,left,y);
x=left;
for(Int32k=startColumnControls;k<endColumnControls;k++)
...{
x+=width[k];
ev.Graphics.DrawLine(pen,x,rowOfTop,x,y);
}
if(y>pWidth-prtTextFont.Height-30)
...{
pindex++;
if(0!=startColumnControls)
...{
curdgi=i+1;
}
if(!ev.HasMorePages)
...{
endColumnControls=0;
}
ev.HasMorePages=true;
}
}
publicvoidPrintPreviewDataTable(DataTableprtTable)
...{
PrintDocumentprtDocument=newPrintDocument();
try
...{
if(printName!=String.Empty)
...{
prtDocument.PrinterSettings.PrinterName=printName;
}
prtDocument.DefaultPageSettings.Landscape=true;
prtDocument.OriginAtMargins=false;
printedTable=prtTable;
pindex=0;
curdgi=0;
width=newint[printedTable.Columns.Count];
pheight=prtDocument.PrinterSettings.DefaultPageSettings.Bounds.Bottom;
pWidth=prtDocument.PrinterSettings.DefaultPageSettings.Bounds.Right;
prtDocument.PrintPage+=newPrintPageEventHandler(Document_PrintPage);
PrintPreviewDialogprtPreviewDialog=newPrintPreviewDialog();
prtPreviewDialog.Document=prtDocument;
prtPreviewDialog.ShowIcon=false;
prtPreviewDialog.WindowState=FormWindowState.Maximized;
prtPreviewDialog.ShowDialog();
}
catch(InvalidPrinterExceptionex)
...{
MessageBox.Show("没有安装打印机");
}
catch(Exceptionex)
...{
MessageBox.Show("打印预览失败");
}
}
}
... {
publicStringprintName=String.Empty;
publicFontprtTextFont=newFont("Verdana",10);
publicFontprtTitleFont=newFont("宋体",10);
privateString[]titles=newString[0];
publicString[]Titles
...{
set
...{
titles=valueasString[];
if(null==titles)
...{
titles=newString[0];
}
}
get
...{
returntitles;
}
}
privateInt32left=20;
privateInt32top=20;
publicInt32Top
...{
set
...{
top=value;
}
get
...{
returntop;
}
}
publicInt32Left
...{
set
...{
left=value;
}
get
...{
returnleft;
}
}
privateDataTableprintedTable;
privateInt32pheight;
privateInt32pWidth;
privateInt32pindex;
privateInt32curdgi;
privateInt32[]width;
privateInt32rowOfDownDistance=3;
privateInt32rowOfUpDistance=2;
publicBooleanPrintDataTable(DataTabletable)
...{
PrintDocumentprtDocument=newPrintDocument();
try
...{
if(printName!=String.Empty)
...{
prtDocument.PrinterSettings.PrinterName=printName;
}
prtDocument.DefaultPageSettings.Landscape=true;
prtDocument.OriginAtMargins=false;
PrintDialogprtDialog=newPrintDialog();
prtDialog.AllowSomePages=true;
prtDialog.ShowHelp=false;
prtDialog.Document=prtDocument;
if(DialogResult.OK!=prtDialog.ShowDialog())
...{
returnfalse;
}
printedTable=table;
pindex=0;
curdgi=0;
width=newInt32[printedTable.Columns.Count];
pheight=prtDocument.PrinterSettings.DefaultPageSettings.Bounds.Bottom;
pWidth=prtDocument.PrinterSettings.DefaultPageSettings.Bounds.Right;
prtDocument.PrintPage+=newPrintPageEventHandler(Document_PrintPage);
prtDocument.Print();
}
catch(InvalidPrinterExceptionex)
...{
MessageBox.Show("没有安装打印机");
}
catch(Exceptionex)
...{
MessageBox.Show("打印错误");
}
prtDocument.Dispose();
returntrue;
}
Int32startColumnControls=0;
Int32endColumnControls=0;
privatevoidDocument_PrintPage(objectsender,PrintPageEventArgsev)
...{
Int32x=left;
Int32y=top;
Int32rowOfTop=top;
Int32i;
Penpen=newPen(Brushes.Black,1);
if(0==pindex)
...{
for(i=0;i<titles.Length;i++)
...{
ev.Graphics.DrawString(titles[i],prtTitleFont,Brushes.Black,left,y+rowOfUpDistance);
y+=prtTextFont.Height+rowOfDownDistance;
}
rowOfTop=y;
foreach(DataRowdrinprintedTable.Rows)
...{
for(i=0;i<printedTable.Columns.Count;i++)
...{
Int32colwidth=Convert.ToInt16(ev.Graphics.MeasureString(dr[i].ToString().Trim(),prtTextFont).Width);
if(colwidth>width[i])
...{
width[i]=colwidth;
}
}
}
}
for(i=endColumnControls;i<printedTable.Columns.Count;i++)
...{
Stringheadtext=printedTable.Columns[i].ColumnName.Trim();
if(pindex==0)
...{
intcolwidth=Convert.ToInt16(ev.Graphics.MeasureString(headtext,prtTextFont).Width);
if(colwidth>width[i])
...{
width[i]=colwidth;
}
}
if(x+width[i]>pheight)
...{
break;
}
ev.Graphics.DrawString(headtext,prtTextFont,Brushes.Black,x,y+rowOfUpDistance);
x+=width[i];
}
startColumnControls=endColumnControls;
if(i<printedTable.Columns.Count)
...{
endColumnControls=i;
ev.HasMorePages=true;
}
else
...{
endColumnControls=printedTable.Columns.Count;
}
ev.Graphics.DrawLine(pen,left,rowOfTop,x,rowOfTop);
y+=rowOfUpDistance+prtTextFont.Height+rowOfDownDistance;
ev.Graphics.DrawLine(pen,left,y,x,y);
for(i=curdgi;i<printedTable.Rows.Count;i++)
...{
x=left;
for(Int32j=startColumnControls;j<endColumnControls;j++)
...{
ev.Graphics.DrawString(printedTable.Rows[i][j].ToString().Trim(),prtTextFont,Brushes.Black,x,y+rowOfUpDistance);
x+=width[j];
}
y+=rowOfUpDistance+prtTextFont.Height+rowOfDownDistance;
ev.Graphics.DrawLine(pen,left,y,x,y);
if(y>pWidth-prtTextFont.Height-30)
...{
break;
}
}
ev.Graphics.DrawLine(pen,left,rowOfTop,left,y);
x=left;
for(Int32k=startColumnControls;k<endColumnControls;k++)
...{
x+=width[k];
ev.Graphics.DrawLine(pen,x,rowOfTop,x,y);
}
if(y>pWidth-prtTextFont.Height-30)
...{
pindex++;
if(0!=startColumnControls)
...{
curdgi=i+1;
}
if(!ev.HasMorePages)
...{
endColumnControls=0;
}
ev.HasMorePages=true;
}
}
publicvoidPrintPreviewDataTable(DataTableprtTable)
...{
PrintDocumentprtDocument=newPrintDocument();
try
...{
if(printName!=String.Empty)
...{
prtDocument.PrinterSettings.PrinterName=printName;
}
prtDocument.DefaultPageSettings.Landscape=true;
prtDocument.OriginAtMargins=false;
printedTable=prtTable;
pindex=0;
curdgi=0;
width=newint[printedTable.Columns.Count];
pheight=prtDocument.PrinterSettings.DefaultPageSettings.Bounds.Bottom;
pWidth=prtDocument.PrinterSettings.DefaultPageSettings.Bounds.Right;
prtDocument.PrintPage+=newPrintPageEventHandler(Document_PrintPage);
PrintPreviewDialogprtPreviewDialog=newPrintPreviewDialog();
prtPreviewDialog.Document=prtDocument;
prtPreviewDialog.ShowIcon=false;
prtPreviewDialog.WindowState=FormWindowState.Maximized;
prtPreviewDialog.ShowDialog();
}
catch(InvalidPrinterExceptionex)
...{
MessageBox.Show("没有安装打印机");
}
catch(Exceptionex)
...{
MessageBox.Show("打印预览失败");
}
}
}
以上代码没有对 当列的长度操作1页的情况,进行考虑。