记得2010年之前,公司的项目基本上都要用到报表,以前我们常用的方法就是针对客户的需求来定制化开发(基本上是死写代码)来实现,经常导致项目经常性的延期,因为客户的需求经常会变化,随着用户的使用认知度的提高,对报表的要求越来越高,导致程序员不停的修改代码来实现,效率不高、结束遥遥无 ...
记得2010年之前,公司的项目基本上都要用到报表,以前我们常用的方法就是针对客户的需求来定制化开发(基本上是死写代码)来实现,经常导致项目经常性的延期,因为客户的需求经常会变化,随着用户的使用认知度的提高,对报表的要求越来越高,导致程序员不停的修改代码来实现,效率不高、结束遥遥无期。。。非常的痛苦;当然市面上有很多报表开发工具可以实现,但是针对小公司来说采购一套这样的系统的成本也非常的高,所以我们决定自己来开发一套像目前的润乾、FineReport 这样的报表设计器,来实现快速的报表设计制作。
当初为了开发这样的系统,花费的了很长的时间学习查阅各种资料,其痛苦只有程序员才能体会,因为没有任何现成的实例代码可供参考,只有看别人的思路来一步步的摸索,本文将我们当初设计制作的报表设计器的功能分享出来,让有需要的或想开发报表设计的朋友们提供一个参考,尽量少走很动弯路,设计端可以直接使用,但是计算引擎和网页的计算的源码就不能分享出来了(请不要介意,因为涉及到公司的保密原因)
记得当初为了制作报表设计器,在网上查找有没有相关的实例资料,找了很久,也是没有找到合适的,后来发现 SourceGrid 可以实现单元格的合并拆分功能,所以决定修改实现get='_blank'>winform端的报表设计。下面我将制作的E_Report 报表控件抽取出来建立一个简易的Winform的可运行的实例提供给大伙下载,希望能给你的开发提供一点帮助和借鉴;当然你可以直接使用也可以,里面的设计功能基本全部能。
抽取出来的源码包含:E_Report 报表设计自定义控件DLL源码; EReportDemo 建立的简易Winform 端设计器使用DLL的实例源码;
一、运行效果
实例中,只做了一个简单的效果,工具栏的按钮在单元格右击属性中都有,只是放了几个常用的在工具导航栏中(右击单元格属性可以看到设计导航)
可以进行单元格的合并、拆分、字体、颜色、背景、边框等的设置,朋友们可以自己编写保存发布等功能,实现报表的真实功能;
例如单元格属性(其他还有很多的属性,自己下载源码后运行起来就能看到了)
对表格的斜线、斜线文字有很好的支持;可以设置表头、表位、标题等 实际效果图如下
二、使用介绍
1、页面初始化的时候,通过 ReportDoc 类 初始报表的行列及单元格属性
1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.Drawing; 5 using System.Windows.Forms; 6 using System.Drawing.Drawing2D; 7 using System. 8 using System.Collections; 9 using E_Report; 10 11 namespace EReportDemo 12 { 13 /// <summary> 14 /// 报表表格对象 15 /// </summary> 16 public class ReportDoc 17 { 18 #region 变量参数定义 19 20 /// <summary> 21 /// 表格对象 22 /// </summary> 23 private EReport _nowReport; 24 25 /// <summary> 26 /// 报表配置编码 27 /// </summary> 28 private string _reportCode = ""; 29 30 /// <summary> 31 /// 表报设计状态 32 /// </summary> 33 private string _reportState = ""; 34 35 #endregion 36 37 #region 函数构造方法 38 39 /// <summary> 40 /// 构造函数 41 /// </summary> 42 public ReportDoc() 43 { 44 this._nowReport = null; 45 this._reportCode = ""; 46 this._reportState = ""; 47 48 } 49 50 51 /// <summary> 52 /// 获取--设置--表格对象 53 /// </summary> 54 public EReport NowReport 55 { 56 get { return this._nowReport; } 57 set { this._nowReport = value; } 58 } 59 60 /// <summary> 61 /// 报表配置编码 62 /// </summary> 63 public string ReportCode 64 { 65 get { return this._reportCode; } 66 set { this._reportCode = value; } 67 } 68 69 /// <summary> 70 /// 报表设计状态 71 /// 新增、修改 两种状态 72 /// </summary> 73 public string ReportState 74 { 75 get { return this._reportState; } 76 set { this._reportState = value; } 77 } 78 79 /// <summary> 80 /// 资源释放 81 /// </summary> 82 ~ReportDoc() 83 { 84 this._nowReport = null; 85 this._reportState = ""; 86 87 } 88 89 #endregion 90 91 #region 加载报表表格 92 93 /// <summary> 94 /// 初始化--报表表格 95 /// </summary> 96 public void InitReport() 97 { 98 99 int rCount = 41; // 41行100 int cCount = 20; // 20列101 102 _nowReport.Redim(rCount, cCount);103 _nowReport.FixedRows = 1;104 _nowReport.FixedColumns = 1;105 106 InitCells();107 108 }109 110 /// <summary>111 /// 初始化--单元格112 /// </summary>113 public void InitCells()114 {115 // 第一行 第一列116 _nowReport.Rows[0].Height = 23;117 _nowReport.Columns[0].Width = 50;118 119 // 设置00格120 _nowReport[0, 0] = new E_Report.Cells.HeaderColumn("");121 122 // 设置行123 for (int rr = 1; rr < _nowReport.RowsCount; rr++)124 {125 string tmRowT = rr.ToString();126 _nowReport[rr, 0] = new E_Report.Cells.HeaderRow(tmRowT);127 }128 129 // 设置列130 for (int cc = 1; cc < _nowReport.ColumnsCount; cc++)131 {132 _nowReport[0, cc] = new E_Report.Cells.HeaderColumn(_nowReport.GetColumnHeadTileChar(cc));133 }134 135 // 设置单元格136 for (int iRow = 1; iRow < _nowReport.RowsCount; iRow++)137 {138 for (int iCol = 1; iCol < _nowReport.ColumnsCount; iCol++)139 {140 _nowReport[iRow, iCol] = new E_Report.Cells.Cell("", typeof(string));141 }142 }143 144 }145 146 147 #endregion148 149 }150 }
原标题:C# 报表设计器 (winform 设计端)开发与实现生成网页的HTML报表
关键词:C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。