加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C#中打印控件的使用

(2009-08-20 12:26:04)
标签:

c#

打印控件

it

分类: C#.Net

在同学的帮助下终于把,打印的程序搞定了^_^.弄出来共享一下吧. 首先弄一个printDocument控件,然后在打印的按钮中直接调用printDocument1.print()事件. 再次嘛就是写printDocument的PrintPag事件了. 下面是我昨天弄好的一个弄出来看看吧。

private void button1_Click(object sender, EventArgs e)

{

 printDocument1.Print();

}

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)

{

Font tabelTextFont = new Font("宋体", 10);

if (dataGridView1.DataBindings != null)

{

int[] columnsWidth = new int[dataGridView1.Columns.Count];//得到所有列的个数

int[] columnsLeft=new int[dataGridView1.Columns.Count]; //

for (int c = 0; c < columnsWidth.Length; c++)//得到列标题的宽度

{

columnsWidth[c] = (int)e.Graphics.MeasureString(dataGridView1.Columns[c].HeaderText , tabelTextFont).Width;

}

for (int rowIndex = 0; rowIndex < dataGridView1.Rows.Count; rowIndex++)//rowindex当前行

{

for (int columnIndex = 0; columnIndex < dataGridView1.Columns.Count; columnIndex++)//当前列

 {

 int w = (int)e.Graphics.MeasureString(dataGridView1.Columns[columnIndex].Name , tabelTextFont).Width; columnsWidth[columnIndex] = w > columnsWidth[columnIndex] ? w : columnsWidth[columnIndex];

}

 }

int rowHidth = 20;

int tableLeft=60;

int tableTop=70;

columnsLeft[0]=tableLeft;

for (int i=1;i<=columnsWidth.Length -1;i++)

{

columnsLeft[i] = columnsLeft[i - 1] + columnsWidth[i - 1]+15;

}

StringFormat sf=new StringFormat ();

sf.Alignment=StringAlignment.Center ;//居中打印

e.Graphics.DrawString("欢迎石印死了开的交流!", new Font("宋体", 15), Brushes.Black, new Point(e.PageBounds.Width / 2, 20),sf );//打印标题

for (int c = 0; c < columnsWidth.Length; c++)//打印表中的列名

{

e.Graphics.DrawString(dataGridView1.Columns[c].HeaderText,new Font ("宋体",10,FontStyle.Bold), Brushes.Black, new Point(columnsLeft[c], tableTop)); e.Graphics.DrawLine(Pens.Black, new Point(columnsLeft[c]-5, tableTop - 5), new Point(columnsLeft[c]-5, tableTop + (dataGridView1 .Rows .Count+1)*rowHidth));

}

e.Graphics.DrawLine(Pens.Black, new Point(columnsLeft[dataGridView1.Columns.Count - 1] + columnsWidth[dataGridView1.Columns.Count - 1], tableTop - 5), new Point(columnsLeft[dataGridView1.Columns.Count - 1] + columnsWidth[dataGridView1.Columns.Count - 1], tableTop + (dataGridView1.Rows.Count + 1) * rowHidth));//画最后面的线

e.Graphics.DrawLine(Pens.Black, new Point(columnsLeft[0] - 5, tableTop - 5), new Point(columnsLeft[dataGridView1.Columns.Count - 1] + columnsWidth[dataGridView1.Columns.Count - 1], tableTop - 5)); for (int rowIndex = 0; rowIndex < dataGridView1.Rows.Count; rowIndex++)//打印表中的内容

{

for (int columnIndex = 0; columnIndex < dataGridView1.Columns.Count; columnIndex++)

{

 e.Graphics.DrawString(dataGridView1.Rows[rowIndex].Cells[columnIndex].Value.ToString(), tabelTextFont, Brushes.Black, new Point(columnsLeft[columnIndex], tableTop + rowHidth * (rowIndex + 1)));

}

 e.Graphics.DrawLine(Pens.Black, new Point(columnsLeft[0]-5, tableTop + (rowIndex +1) * rowHidth-5), new Point(columnsLeft[dataGridView1.Columns.Count - 1] + columnsWidth[dataGridView1.Columns.Count - 1], tableTop + (rowIndex +1)*rowHidth-5));//循环画行

}

}

 另外要是想有打印预览的话,那就还要一个printPreviewDialog控件了。要把该控件的document事件和PrintDocument关联起来,就可以了。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有