前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用GDI+画报表

使用GDI+画报表

作者头像
冰封一夏
发布2019-09-11 15:29:42
5810
发布2019-09-11 15:29:42
举报
文章被收录于专栏:c#Winform自定义控件系列

其实使用GDI+画报表也比较简单,只要设定好坐标就行了

下面给个例子看看

代码语言:javascript
复制
  1  private void button9_Click(object sender, EventArgs e)
  2         {
  3             printDialog1.ShowDialog();  //设置打印文档
  4             printPreviewDialog1.Document = this.printDocument1;
  5             printPreviewDialog1.PrintPreviewControl.Zoom = 1;
  6             printPreviewDialog1.ClientSize = new Size(800, 800);
  7             printPreviewDialog1.ShowDialog();
  8         }
  9 
 10         private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
 11         {
 12             //第一条竖线开始30,100
 13             //第2条竖线坐标开始130,100
 14             //第三条竖线开始230,linebegin,结束230,lineend
 15             //第四条竖线开始340,linebegin,结束340,lineend
 16             //第五条竖线开始460,linebegin,结束460,lineend
 17             //第六条竖线开始670,linebegin,结束670,lineend
 18             //最后一条竖线开始790,100
 19             int y = 50;
 20             int linebegin = 0;
 21             int lineend = 0;
 22             int end = 0;
 23             Font font = new Font("宋体", 10, FontStyle.Regular);
 24             Pen title_pen = new Pen(Color.Black, 1);
 25             e.Graphics.DrawString("专家抽取列表", new Font("宋体", 20, FontStyle.Bold), Brushes.Black, 270, y);
 26             y += 80;
 27             e.Graphics.DrawLine(title_pen, 20, y, 690, y);//第一条横线
 28             e.Graphics.DrawString("项目名称", font, Brushes.Black, (20 + (90 - GetWidth("项目名称", font)) / 2 - 5), y + 10);
 29             e.Graphics.DrawString(this.txtname.Text.Trim(), font, Brushes.Black, (110 + (570 - GetWidth(this.txtname.Text.Trim(), font)) / 2 - 5), y + 10);
 30             y += 40;
 31             e.Graphics.DrawLine(title_pen, 20, y, 690, y);//第二条横线
 32             e.Graphics.DrawString("招标单位", font, Brushes.Black, (20 + (90 - GetWidth("招标单位", font)) / 2 - 5), y + 10);
 33             e.Graphics.DrawString(this.txtunit.Text.Trim(), font, Brushes.Black, (110 + (570 - GetWidth(this.txtunit.Text.Trim(), font)) / 2 - 5), y + 10);
 34             y += 40;
 35             e.Graphics.DrawLine(title_pen, 20, y, 690, y);//第三条横线
 36             e.Graphics.DrawString("抽取时间", font, Brushes.Black, (20 + (90 - GetWidth("抽取时间", font)) / 2 - 5), y + 10);
 37             e.Graphics.DrawString(this.txttime.Text.Trim(), font, Brushes.Black, (110 + (570 - GetWidth(this.txttime.Text.Trim(), font)) / 2 - 5), y + 10);
 38             y += 40;
 39             e.Graphics.DrawLine(title_pen, 20, y, 690, y);//第四条横线
 40 
 41             linebegin = y;
 42             //开始画列名
 43             e.Graphics.DrawString("专业", font, Brushes.Black, (20 + (90 - GetWidth("专业", font)) / 2 - 5), y + 10);
 44             e.Graphics.DrawString("姓名", font, Brushes.Black, (110 + (70 - GetWidth("姓名", font)) / 2 - 5), y + 10);
 45             e.Graphics.DrawString("固定电话", font, Brushes.Black, (180 + (90 - GetWidth("固定电话", font)) / 2 - 5), y + 10);
 46             e.Graphics.DrawString("手机", font, Brushes.Black, (270 + (110 - GetWidth("手机", font)) / 2 - 5), y + 10);
 47             e.Graphics.DrawString("工作单位", font, Brushes.Black, (380 + (200 - GetWidth("工作单位", font)) / 2 - 5), y + 10);
 48             e.Graphics.DrawString("职称", font, Brushes.Black, (580 + (110 - GetWidth("职称", font)) / 2 - 5), y + 10);
 49             y += 40;
 50             e.Graphics.DrawLine(title_pen, 20, y, 690, y);//第五条横线
 51             //开始画table数据
 52             foreach (DataGridViewRow dr in this.dataGridView2.Rows)
 53             {
 54                 e.Graphics.DrawString(dr.Cells[1].Value.ToString(), font, Brushes.Black, (20 + (90 - GetWidth(dr.Cells[1].Value.ToString(), font)) / 2 - 5), y + 10);
 55                 e.Graphics.DrawString(dr.Cells[2].Value.ToString(), font, Brushes.Black, (110 + (70 - GetWidth(dr.Cells[2].Value.ToString(), font)) / 2 - 5), y + 10);
 56                 int phone = GetWidth(dr.Cells[3].Value.ToString(), font);
 57                 if (phone <= 90)
 58                 {
 59                     e.Graphics.DrawString(dr.Cells[3].Value.ToString(), font, Brushes.Black, (180 + (90 - phone) / 2 - 5), y + 10);
 60                 }
 61                 else
 62                 {
 63                     string _phone = dr.Cells[3].Value.ToString();
 64                     _phone = _phone.Substring(0, 9) + "…";
 65                     phone = GetWidth(_phone, font);
 66                     e.Graphics.DrawString(_phone, font, Brushes.Black, (180 + (90 - phone) / 2 - 5), y + 10);
 67                 }
 68                 int mobile = GetWidth(dr.Cells[4].Value.ToString(), font);
 69                 if (mobile <= 100)
 70                 {
 71                     e.Graphics.DrawString(dr.Cells[4].Value.ToString(), font, Brushes.Black, (270 + (110 - mobile) / 2 - 5), y + 10);
 72                 }
 73                 else
 74                 {
 75                     string _mobile = dr.Cells[4].Value.ToString();
 76                     _mobile = _mobile.Substring(0, 11) + "…";
 77                     phone = GetWidth(_mobile, font);
 78                     e.Graphics.DrawString(_mobile, font, Brushes.Black, (270 + (110 - phone) / 2 - 5), y + 10);
 79                 }
 80                 e.Graphics.DrawString(dr.Cells[5].Value.ToString(), font, Brushes.Black, (380 + (200 - GetWidth(dr.Cells[5].Value.ToString(), font)) / 2 - 5), y + 10);
 81                 e.Graphics.DrawString(dr.Cells[6].Value.ToString(), font, Brushes.Black, (580 + (110 - GetWidth(dr.Cells[6].Value.ToString(), font)) / 2 - 5), y + 10);
 82                 y += 40;
 83                 e.Graphics.DrawLine(title_pen, 20, y, 690, y);
 84             }
 85             lineend = y;
 86             e.Graphics.DrawString("抽取人签字", font, Brushes.Black, (20 + (90 - GetWidth("抽取人签字", font)) / 2 - 5), y + 10);
 87             y += 40;
 88             e.Graphics.DrawLine(title_pen, 20, y, 690, y);
 89             e.Graphics.DrawString("监督人签字", font, Brushes.Black, (20 + (90 - GetWidth("监督人签字", font)) / 2 - 5), y + 10);
 90             y += 40;
 91             e.Graphics.DrawLine(title_pen, 20, y, 690, y);
 92             end = y;
 93 
 94             //开始画竖线
 95             //e.Graphics.DrawLine(title_pen, 20, 130, 20, y);
 96             //e.Graphics.DrawLine(title_pen, 130, 130, 130, y);
 97             //e.Graphics.DrawLine(title_pen, 210, linebegin, 210, lineend);
 98             //e.Graphics.DrawLine(title_pen, 320, linebegin, 320, lineend);
 99             //e.Graphics.DrawLine(title_pen, 440, linebegin, 440, lineend);
100             //e.Graphics.DrawLine(title_pen, 670, linebegin, 670, lineend);
101             //e.Graphics.DrawLine(title_pen, 800, 130, 800, y);
102             e.Graphics.DrawLine(title_pen, 20, 130, 20, y);
103             e.Graphics.DrawLine(title_pen, 110, 130, 110, y);
104             e.Graphics.DrawLine(title_pen, 180, linebegin, 180, lineend);
105             e.Graphics.DrawLine(title_pen, 270, linebegin, 270, lineend);
106             e.Graphics.DrawLine(title_pen, 380, linebegin, 380, lineend);
107             e.Graphics.DrawLine(title_pen, 580, linebegin, 580, lineend);
108             e.Graphics.DrawLine(title_pen, 690, 130, 690, y);
109         }
110 
111         private int GetWidth(string str, Font myf)
112         {
113             Graphics g = Graphics.FromHwnd(this.Handle);
114 
115             StringFormat sf = new StringFormat(StringFormat.GenericTypographic);
116 
117             SizeF size = g.MeasureString(str, myf, 1000, sf);
118 
119             return Convert.ToInt32(size.Width);
120 
121         }

效果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013-01-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档