C# 打印DataTable

public   class  PrintFunction
    
{
        
public String printName = String.Empty;
        
public Font prtTextFont = new Font("Verdana"10);
        
public Font prtTitleFont = new Font("宋体"10);
        
private String[] titles = new String[0]; 
        
public String[] Titles
        
{
            
set
            
{
                titles 
= value as String[];
                
if (null == titles)
                
{
                    titles 
= new String[0];
                }

            }

            
get
            
{
                
return titles;
            }

        }

        
private Int32 left = 20;
        
private Int32 top = 20;
        
public Int32 Top
        
{
            
set
            
{
                top 
= value;                
            }

            
get
            
{
                
return top;
            }

        }

        
public Int32 Left
        
{
            
set
            
{
                left 
= value;
            }

            
get
            
{
                
return left;
            }

        }

        
private DataTable printedTable;
        
private Int32 pheight;
        
private Int32 pWidth;
        
private Int32 pindex;
        
private Int32 curdgi;
        
private Int32[] width;
        
private Int32 rowOfDownDistance = 3;
        
private Int32 rowOfUpDistance = 2;
        
public Boolean PrintDataTable(DataTable table)
        
{
            PrintDocument prtDocument 
= new PrintDocument();
            
try
            
{
                
if (printName != String.Empty)
                
{
                    prtDocument.PrinterSettings.PrinterName 
= printName;
                }

                prtDocument.DefaultPageSettings.Landscape 
= true;
                prtDocument.OriginAtMargins 
= false;
                PrintDialog prtDialog 
= new PrintDialog();
                prtDialog.AllowSomePages 
= true;

                prtDialog.ShowHelp 
= false;
                prtDialog.Document 
= prtDocument;

                
if (DialogResult.OK != prtDialog.ShowDialog())
                
{
                    
return false;
                }


                printedTable 
= table;
                pindex 
= 0;
                curdgi 
= 0;
                width 
= new Int32[printedTable.Columns.Count];
                pheight 
= prtDocument.PrinterSettings.DefaultPageSettings.Bounds.Bottom;
                pWidth 
= prtDocument.PrinterSettings.DefaultPageSettings.Bounds.Right;

                prtDocument.PrintPage 
+= new PrintPageEventHandler(Document_PrintPage);

                prtDocument.Print();

            }

            
catch( InvalidPrinterException ex )
            
{
                MessageBox.Show(
"没有安装打印机");
            }

            
catch (Exception ex)
            
{
                MessageBox.Show(
"打印错误");
            }

            prtDocument.Dispose();
            
return true;
        }


        Int32 startColumnControls 
= 0;
        Int32 endColumnControls 
= 0;
        
private void Document_PrintPage(object sender, PrintPageEventArgs ev)
        
{
            Int32 x 
= left;
            Int32 y 
= top;
            Int32 rowOfTop 
= top;
            Int32 i;
            Pen pen 
= new Pen(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(DataRow dr in printedTable.Rows)
                
{
                    
for (i = 0; i < printedTable.Columns.Count; i++)
                    
{
                        Int32 colwidth 
= 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++)
            
{
                String headtext 
= printedTable.Columns[i].ColumnName.Trim();
                
if (pindex == 0)
                
{
                    
int colwidth = 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 (Int32 j = 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 (Int32 k = 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;
            }

        }

        
public void PrintPreviewDataTable(DataTable prtTable)
        
{
            PrintDocument prtDocument 
= new PrintDocument();
            
try
            
{
                
if (printName != String.Empty)
                
{
                    prtDocument.PrinterSettings.PrinterName 
= printName;

                }

                prtDocument.DefaultPageSettings.Landscape 
= true;
                prtDocument.OriginAtMargins 
= false;
                printedTable 
= prtTable;
                pindex 
= 0;
                curdgi 
= 0;
                width 
= new int[printedTable.Columns.Count];
                pheight 
= prtDocument.PrinterSettings.DefaultPageSettings.Bounds.Bottom;
                pWidth 
= prtDocument.PrinterSettings.DefaultPageSettings.Bounds.Right;
                prtDocument.PrintPage 
+= new PrintPageEventHandler(Document_PrintPage);
                PrintPreviewDialog prtPreviewDialog 
= new PrintPreviewDialog();
                prtPreviewDialog.Document 
= prtDocument;
                prtPreviewDialog.ShowIcon 
= false;
                prtPreviewDialog.WindowState 
= FormWindowState.Maximized;
                prtPreviewDialog.ShowDialog();

            }

            
catch (InvalidPrinterException ex)
            
{
                MessageBox.Show(
"没有安装打印机");
            }

            
catch (Exception ex)
            
{
                MessageBox.Show(
"打印预览失败");
            }


        }

    }


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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值