linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘网络学院网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > asp.net >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·NetBPM工作流的一个示例:请假
·Office Web Components(OWC)绘
·asp.net正则表达式语法
·asp.net 2.0 ajax中使用PopupC
·Ado.Net读取Excel常见问题总结
·数据源为空时如何让GridView显
·如何让UpdatePanel支持文件上传
·C#.Net的常见面试试题和参考答
·asp.net ajax客户端编程+jquer
·Brettle.Web.NeatUpload.dll支
·ASP.NET使用Cookie
·ASP.NET DEMO 15: 同时支持行单
·如何使IE的后退按钮无效
·如何在ASP.NET中用OWC绘制图表
·asp.net:正确判断当前用户角色
最新文章
·Ajax Control Toolkit Animati
·讨论一下类似BlogEngine内一次
·使用CSS+SiteMap+UserControl+
·Asp.net中多彩下拉框的实现
·浅谈ASP.NET的Postback
·分清ASP.NET AJAX中的Extender
·Tip:在使用AjaxControlTookit
·有关注册DataItem的一些可能被
·IIRF(Ionic's Isapi Rewrite
·asp.net 客户端回调功能的实现
·关于控件部分的看法--读Progra
·为什么在vista上做开发
·如何封装JS和CSS文件为服务器端
·岂今我看过的最强的排序算法
·设计模式学习笔记之单件模式
Google
 
DataGrid控件通用打印类
[ 作者:  加入时间:2007-11-26 16:28:56  来自:Linux联盟收集整理 ]
  Imports System.Drawing.Printing UL3Linux联盟
  Imports System.Drawing.Color UL3Linux联盟
  Imports System.Windows.Forms UL3Linux联盟
  Imports System.Drawing.Font UL3Linux联盟
  Imports System.Drawing.PointF UL3Linux联盟
  Imports System.Windows.Forms.DataGrid UL3Linux联盟
  Imports System.Drawing.Pen UL3Linux联盟
  Imports System.Drawing UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
  ''======================================= UL3Linux联盟
  'DATAGRID控件通用打印类 UL3Linux联盟
  '中和科技-孙利臣 UL3Linux联盟
  '于2003年05月27日17:05 UL3Linux联盟
  '用于打印DATAGRID控件中的数据. UL3Linux联盟
   UL3Linux联盟
  '======================================= UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
  Public Class PrintDataGrid UL3Linux联盟
   '用户可自定义 UL3Linux联盟
   Private PrintFont As New Font("宋体", 10) '当前要打印文本的字体及字号 UL3Linux联盟
   Private PrintLines As Integer = 50 '当前页共要分成多少行. UL3Linux联盟
   Private PrintRecordNumber As Integer = 45 '当前页共要打印的记录的行数 UL3Linux联盟
   UL3Linux联盟
   '以下为模块内部使用 UL3Linux联盟
   Private DataGridSource As DataGrid UL3Linux联盟
   Private ev As PrintPageEventArgs UL3Linux联盟
   Private PrintDataGrid As PrintDocument UL3Linux联盟
   Private PrintPriview As PrintPreviewDialog UL3Linux联盟
   Private PageSetup As PageSetupDialog UL3Linux联盟
   Private PrintScale As Double = 1 '当前要打印的数据与DATAGRID控件内数据的比例 UL3Linux联盟
   UL3Linux联盟
   Private DataGridColumn As DataColumn UL3Linux联盟
   Private DataGridRow As DataRow UL3Linux联盟
   Private DataGridTable As DataTable UL3Linux联盟
   UL3Linux联盟
   Private Cols As Integer '当前要打印的列 UL3Linux联盟
   Private Rows As Integer = 1 '当前要打印的行 UL3Linux联盟
   UL3Linux联盟
   Private ColsCount As Integer '当前DATAGRID共有多少列 UL3Linux联盟
   UL3Linux联盟
   Private PrintingLineNumber As Integer = 0 '当前正要打印的行号 UL3Linux联盟
   Private PageRecordNumber As Integer '当前要所要打印的记录行数,由计算得到. UL3Linux联盟
   UL3Linux联盟
   Dim X_unit As Integer '表的基本单位 UL3Linux联盟
   Dim Y_unit As Integer UL3Linux联盟
   UL3Linux联盟
   Private PrintingPageNumber As Integer = 0 '正要打印的页号 UL3Linux联盟
   UL3Linux联盟
   Private PageNumber As Integer '共需要打印的页数 UL3Linux联盟
   Private PrintRecordLeave As Integer '当前还有多少页没有打印 UL3Linux联盟
   Private PrintRecordComplete As Integer = 0 '已经打印完的记录数 UL3Linux联盟
   UL3Linux联盟
   Sub New(ByVal TableSource As DataGrid) UL3Linux联盟
   DataGridSource = TableSource UL3Linux联盟
   DataGridTable = New DataTable() UL3Linux联盟
   DataGridTable = DataGridSource.DataSource() UL3Linux联盟
   ColsCount = DataGridTable.Columns.Count UL3Linux联盟
   End Sub UL3Linux联盟
   UL3Linux联盟
   '用户自定义字体及字号 UL3Linux联盟
   Public WriteOnly Property setPrintFont() As System.Drawing.Font UL3Linux联盟
   Set(ByVal Value As System.Drawing.Font) UL3Linux联盟
   PrintFont = Value UL3Linux联盟
   End Set UL3Linux联盟
   End Property UL3Linux联盟
   UL3Linux联盟
   '设置每页要打印的的记录条数 UL3Linux联盟
   Public WriteOnly Property setPrintRecordNumber() As Integer UL3Linux联盟
   Set(ByVal Value As Integer) UL3Linux联盟
   PrintRecordNumber = Value UL3Linux联盟
   End Set UL3Linux联盟
   End Property UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
   Public Sub Print() UL3Linux联盟
   Try UL3Linux联盟
   PrintDataGrid = New System.Drawing.Printing.PrintDocument() UL3Linux联盟
   AddHandler PrintDataGrid.PrintPage, AddressOf Me.PrintDataGrid_PrintPage UL3Linux联盟
   'PrintDataTable.Print() UL3Linux联盟
   UL3Linux联盟
   '打印机设置对话框 UL3Linux联盟
   PageSetup = New PageSetupDialog() UL3Linux联盟
   PageSetup.PageSettings = PrintDataGrid.DefaultPageSettings UL3Linux联盟
   If PageSetup.ShowDialog() = DialogResult.Cancel Then UL3Linux联盟
   Exit Sub UL3Linux联盟
   End If UL3Linux联盟
   UL3Linux联盟
   '当前页是横向还是纵向打印 UL3Linux联盟
   '计算当前页总共可以打印的行数 UL3Linux联盟
   If PrintDataGrid.DefaultPageSettings.Landscape = False Then UL3Linux联盟
   PrintLines = PrintDataGrid.DefaultPageSettings.PaperSize.Height / (PrintFont.Height + 5) UL3Linux联盟
   Else UL3Linux联盟
   PrintLines = PrintDataGrid.DefaultPageSettings.PaperSize.Width / (PrintFont.Height + 5) UL3Linux联盟
   End If UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
   '如果用户选择自定义纸张大小打印,则按B5纸打印,不管实际纸张大小 UL3Linux联盟
   If PrintDataGrid.DefaultPageSettings.PaperSize.PaperName.ToString = "custom" Then UL3Linux联盟
   UL3Linux联盟
   End If UL3Linux联盟
   UL3Linux联盟
   '预览窗口 UL3Linux联盟
   PrintPriview = New PrintPreviewDialog() UL3Linux联盟
   PrintPriview.Document = PrintDataGrid UL3Linux联盟
   PrintPriview.ShowDialog() UL3Linux联盟
   UL3Linux联盟
   Catch ex As Exception UL3Linux联盟
   MessageBox.Show("error:" & ex.ToString) UL3Linux联盟
   Finally UL3Linux联盟
   UL3Linux联盟
   End Try UL3Linux联盟
   End Sub UL3Linux联盟
   UL3Linux联盟
   Private Sub PrintDataGrid_PrintPage(ByVal sender As Object, ByVal ev As System.Drawing.Printing.PrintPageEventArgs) UL3Linux联盟
   UL3Linux联盟
   'A4纸 A4 纸,210 x 297 毫米。 UL3Linux联盟
   'B5纸 B5 纸,182 x 257 毫米。 UL3Linux联盟
   UL3Linux联盟
   Dim strPrint As String '当前要打印的文本 UL3Linux联盟
   Dim DrawBrush As New SolidBrush(System.Drawing.Color.Blue) '当前画笔颜色 UL3Linux联盟
   UL3Linux联盟
   Dim X As Integer '当前要打印的文本的横坐标 UL3Linux联盟
   Dim Y As Integer '当前要打印的文本的列坐标 UL3Linux联盟
   UL3Linux联盟
   Dim DrawPoint As New PointF(X, Y) UL3Linux联盟
   UL3Linux联盟
   Dim row_count As Integer '当前要打印的行 UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
   PrintRecordLeave = DataGridTable.Rows.Count - PrintRecordComplete '还有多少条记录没有打印 UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
   PageNumber = PrintRecordLeave / PrintRecordNumber '共需要打印的页数 UL3Linux联盟
   PrintingPageNumber = 0 '因为每打印一个新页都要计算还有多少页没有打印所以以打印的页数初始为0 UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
   '将当前页分成基本的单元 UL3Linux联盟
   If PrintDataGrid.DefaultPageSettings.Landscape = True Then UL3Linux联盟
   X_unit = PrintDataGrid.DefaultPageSettings.PaperSize.Height / (DataGridTable.Columns.Count + 2) UL3Linux联盟
   Y_unit = PrintDataGrid.DefaultPageSettings.PaperSize.Width / PrintLines UL3Linux联盟
   UL3Linux联盟
   Else UL3Linux联盟
   X_unit = PrintDataGrid.DefaultPageSettings.PaperSize.Width / (DataGridTable.Columns.Count + 2) UL3Linux联盟
   Y_unit = PrintDataGrid.DefaultPageSettings.PaperSize.Height / PrintLines UL3Linux联盟
   UL3Linux联盟
   End If UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
   '计算,余下的记录条数是否还可以在一页打印,不满一页时为假 UL3Linux联盟
   If DataGridTable.Rows.Count - PrintingPageNumber * PrintRecordNumber >= PrintRecordNumber Then UL3Linux联盟
   PageRecordNumber = PrintRecordNumber UL3Linux联盟
   Else UL3Linux联盟
   PageRecordNumber = (DataGridTable.Rows.Count - PrintingPageNumber * PrintRecordNumber) Mod PrintRecordNumber UL3Linux联盟
   End If UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
   While PrintingPageNumber <= PageNumber UL3Linux联盟
   UL3Linux联盟
   '文档标题----------------打印开始 UL3Linux联盟
   strPrint = DataGridSource.CaptionText '文档标题 UL3Linux联盟
   DrawPoint = New PointF(X_unit, Y_unit) UL3Linux联盟
   ev.Graphics.DrawString(strPrint, PrintFont, DrawBrush, DrawPoint) UL3Linux联盟
   '文档标题----------------打印结束 UL3Linux联盟
   UL3Linux联盟
   '得到DATAGRID的所有列名 UL3Linux联盟
   Dim ColumnText(DataGridTable.Columns.Count) As String UL3Linux联盟
   Dim Table As Integer UL3Linux联盟
   UL3Linux联盟
   For Cols = 0 To DataGridTable.Columns.Count - 1 UL3Linux联盟
   UL3Linux联盟
   ColumnText(Cols) = DataGridTable.Columns(Cols).ToString '得到当前所有的列名 UL3Linux联盟
   UL3Linux联盟
   DrawPoint = New PointF(X_unit * (Cols + 1), Y_unit * 2) UL3Linux联盟
   ev.Graphics.DrawString(ColumnText(Cols), PrintFont, DrawBrush, DrawPoint) UL3Linux联盟
   UL3Linux联盟
   Next UL3Linux联盟
   UL3Linux联盟
   DrawPoint = New PointF(X_unit, Y_unit * 2) UL3Linux联盟
   Call DrawLine(DrawPoint, ev) '画线 UL3Linux联盟
   '结束---------------------得到DATAGRID的所有列名 UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
   Dim PrintingLine As Integer = 0 '当前页面已经打印的记录行数 UL3Linux联盟
   UL3Linux联盟
   '用于确定是否换页的标记 UL3Linux联盟
   Dim strUpData As String = "" '当前数据的前一个数据 UL3Linux联盟
   Dim strNonce As String = "" '当前数据 UL3Linux联盟
   UL3Linux联盟
   While PrintingLine < PageRecordNumber UL3Linux联盟
   UL3Linux联盟
   DataGridRow = DataGridTable.Rows(PrintRecordComplete) '确定要当前要打印的记录的行号 UL3Linux联盟
   For Cols = 0 To DataGridTable.Columns.Count - 1 UL3Linux联盟
   DrawPoint.X = X_unit * (Cols + 1) UL3Linux联盟
   DrawPoint.Y = Y_unit * (PrintingLine + 1 + 2) UL3Linux联盟
   UL3Linux联盟
   If Cols = 0 Then '所要根据此列的数据分页 UL3Linux联盟
   If strUpData <> "" Then 'And strNonce <> "" UL3Linux联盟
   If strUpData <> DataGridRow(ColumnText(0)) Then UL3Linux联盟
   ev.HasMorePages = True UL3Linux联盟
   Exit Sub UL3Linux联盟
   UL3Linux联盟
   End If UL3Linux联盟
   End If UL3Linux联盟
   End If UL3Linux联盟
   UL3Linux联盟
   ev.Graphics.DrawString(DataGridRow(ColumnText(Cols)), PrintFont, DrawBrush, DrawPoint) UL3Linux联盟
   strUpData = DataGridRow(ColumnText(0)) '当前行数据打印完成后,将打记录的第一列保存,(也可不用此语句,只为明确) UL3Linux联盟
   Next UL3Linux联盟
   UL3Linux联盟
   DrawPoint.X = X_unit * 1 UL3Linux联盟
   DrawPoint.Y = Y_unit * (PrintingLine + 1 + 2) UL3Linux联盟
   UL3Linux联盟
   Call DrawLine(DrawPoint, ev) UL3Linux联盟
   UL3Linux联盟
   PrintingLine += 1 UL3Linux联盟
   PrintRecordComplete += 1 UL3Linux联盟
   UL3Linux联盟
   '打印完最后一条记录后结束打印. UL3Linux联盟
   '如:当前有500条记录.从0开始打印,实际打印的为第一条记录.则打印500条时实际的是第501条记录.也就是最后一条 UL3Linux联盟
   'datagridtable.rows.count得到就是表内的实际记录条数,共有多少条记录(从1开始),当 UL3Linux联盟
   'printrecordcomplete>=datagridtable.rows.count也就是当前已经打印到了500条,加1后将要打印第501条,越界,则结束. UL3Linux联盟
   If PrintRecordComplete >= DataGridTable.Rows.Count Then UL3Linux联盟
   ev.HasMorePages = False UL3Linux联盟
   Exit Sub UL3Linux联盟
   End If UL3Linux联盟
   End While UL3Linux联盟
   UL3Linux联盟
   PrintingPageNumber += 1 UL3Linux联盟
   If PrintingPageNumber > PageNumber Then UL3Linux联盟
   ev.HasMorePages = False UL3Linux联盟
   Else UL3Linux联盟
   UL3Linux联盟
   ev.HasMorePages = True UL3Linux联盟
   Exit While UL3Linux联盟
   End If UL3Linux联盟
   UL3Linux联盟
   End While UL3Linux联盟
   UL3Linux联盟
   End Sub UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
   '画线 只必指定当前行的打印文字的开始位置就可,x,y为当前行文字的打印位置 UL3Linux联盟
   Private Sub DrawLine(ByVal point As PointF, ByVal ev As System.Drawing.Printing.PrintPageEventArgs) UL3Linux联盟
   Dim blackPen As New Pen(System.Drawing.Color.Black, 1) UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
   ev.Graphics.DrawLine(blackPen, point.X, point.Y + PrintFont.Height, point.X * (ColsCount + 1), point.Y + PrintFont.Height) UL3Linux联盟
   UL3Linux联盟
   End Sub UL3Linux联盟
   UL3Linux联盟
  End Class UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
  `````````````````````````````````````````````````````` UL3Linux联盟
   UL3Linux联盟
   Private aa As PrintDataGrid.PrintDataGrid UL3Linux联盟
   UL3Linux联盟
   aa = New PrintDataGrid.PrintDataGrid(DataGrid1) UL3Linux联盟
   UL3Linux联盟
   aa.setPrintFont() = New System.Drawing.Font("宋体", 12) '打印文本的字体 UL3Linux联盟
   aa.setPrintRecordNumber = 30 '每页要打印的记录行数 UL3Linux联盟
   UL3Linux联盟
   aa.Print() UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
   UL3Linux联盟
  功能:可以直接打印DATAGRID控件中的数据,但不能对数据进行格式化,功能还在完善中:) UL3Linux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·创建完全可编辑的 DataGrid  (2007-11-26 16:28:22)
 ·Web Form中的Datagrid的自定义分页  (2007-11-26 16:27:40)
 ·格式化DataGrid的例子  (2007-11-26 16:27:11)
 ·为DataGrid添加自动编号功能  (2007-11-26 16:26:28)
 ·在DataGrid里添加确认删除的对话框  (2007-11-26 16:25:50)
 ·用嵌套的DataGrid实现主从式表的显示  (2007-11-26 15:35:59)
 ·典型Datagrid分页、排序、删除代码  (2007-11-20 17:08:55)
 ·从 DataGridView 控件 托放数据 到 TreeView控件  (2007-10-29 14:21:22)
 ·用DATaGrid实现一对多的关系  (2007-10-26 13:01:27)
 ·将datagrid的数据源到出导excel  (2007-10-26 12:54:44)