C# 打印DataTable

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(
"打印预览失败");
}


}

}


以上代码没有对 当列的长度操作1页的情况,进行考虑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值