二十六、【开源框架】EFW框架Winform前端开发之Grid++Report报表、条形码、Excel导出、图表控件
EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA
EFW框架实例源代码下载:http://pan.baidu.com/s/1o6MAKCa
前言:本章介绍除DotNetBar2控件套件之外的另外一些常用控件,包括Grid++Report报表、条形码、Excel导出、图表控件ZedGraph;类似这些控件网上免费开源的太少了,经过一番对比和使用感受最后决定把这几个控件整合到EFW框架中供大家选择使用;
本文要点:
1.Grid++Report报表
2.Winform程序接收条形码
3.Excel导出NPOI
4.图表控件ZedGraph
1.Grid++Report报表
参考资料:http://www.rubylong.cn/index.htm
Grid++Report 是一款高性能的报表开发工具,特别适用于信息管理系统,如ERP、进销存、财务等软件的报表开发。针对票据套打进行了专门实现,也是实现票据打印的好工具。Grid++Report是完全可编程的报表工具,是制作动态报表的最佳选择。针对中国式报表的特点进行了很多专门的设计,是为开发中国式报表量身定做的一款报表工具。
框架中把Grid++Report的组件封装了一个设计报表的工具“报表设计器.exe”,这样不用安装报表工具也可以打开报表文件进行设计;
如下图,使用EFW框架开发一张报表,调用框架中GridReport对象把从后台取出的DataTable数据填充到报表中,第二步利用报表工具设计报表文件,运行程序显示报表。
2.Winform程序接收条形码
参考资料:http://blog.sina.com.cn/s/blog_5387be9b0100osh8.html
传统获取条码枪的数据必须焦点定位在文本框上,这样条码的内容才能显示在文本框上,这种做法有点类似外接键盘(其实从消息传送上它就相当于一个键盘),但是如果没有输入焦点,每次得需要鼠标点一下文本框获取焦点,比较频繁的话对使用者来说还是挺痛苦的。我想实现的是,不管什么情况,只要扫描器一工作,我的程序就能自动激活,并能获得当前输入的条形码信息。
实现思路:我用的USB口的条形码扫描器,仔细分析了一下,扫描成功后,以键盘按键消息的形式把条形码输入信息通知给系统。这样通过键盘钩子就可以方便的获得该信息了。但是,怎样区分信息是键盘还是条形码输入的哪?很简单,条形码扫描器在很短的时间内输入了至少3个字符以上信息,并且以“回车”作为结束字符,在这种思想指引下,很完美的实现了预定功能。
解决上面问题,输入条码的时候还会碰到另外一个问题,就是条码肯定不止一种类型,如:员工工号条码、单据条码等,以前的做法就是界面上多摆几个文本框控件,焦点定位哪个文本框就扫描对应的条码;而用上面窗体接收的方式,不需要焦点那就区分不了了;这时候我们需要在条码上下文章了,就是条码生成要定义出一套特定的规则,获取条码后,根据这个规则就能判断哪种类型条码;条码的规则可以是按长度、也可以特殊字符,我这建议每种条码前面带一个字段来区分条码的类型,这种方式比较简单点;
使用EFW框架获取扫描枪的数据,首先窗体代码重写继承的BaseForm基类中的doBarCode方法,就可以从参数barCode中获取扫描出来的数据;再根据扫描出来的条码规则判断条码类型,然后进行相关业务操作;
3.Excel导出(NPOI )
参考资料:http://npoi.codeplex.com/
使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写。NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作。
(一)传统操作Excel遇到的问题:
1、如果是.NET,需要在服务器端装Office,且及时更新它,以防漏洞,还需要设定权限允许.NET访问COM+,如果在导出过程中出问题可能导致服务器宕机。
2、Excel会把只包含数字的列进行类型转换,本来是文本型的,Excel会将其转成数值型的,比如编号000123会变成123。
3、导出时,如果字段内容以“-”或“=”开头,Excel会把它当成公式进行,会报错。
4、Excel会根据Excel文件前8行分析数据类型,如果正好你前8行某一列只是数字,那它会认为该列为数值型,自动将该列转变成类似1.42702E+17格式,日期列变成包含日期和数字的。
(二)使用NPOI的优势
1、您可以完全免费使用该框架
2、包含了大部分EXCEL的特性(单元格样式、数据格式、公式等等)
4、采用面向接口的设计架构( 可以查看 NPOI.SS 的命名空间)
5、同时支持文件的导入和导出
6、基于.net 2.0 也支持xlsx 和 docx格式(当然也支持.net 4.0)
7、大量的实例代码
8、你不需要在服务器上安装微软的Office,可以避免版权问题。
9、使用起来比Office PIA的API更加方便,更人性化。
NPOI之所以强大,并不是因为它支持导出Excel,而是因为它支持导入Excel,并能“理解”OLE2文档结构,这也是其他一些Excel读写库比较弱的方面。通常,读入并理解结构远比导出来得复杂,因为导入你必须假设一切情况都是可能的,而生成你只要保证满足你自己需求就可以了,如果把导入需求和生成需求比做两个集合,那么生成需求通常都是导入需求的子集,这一规律不仅体现在Excel读写库中,也体现在pdf读写库中,目前市面上大部分的pdf库仅支持生成,不支持导入。
如上图,使用EFW框架导出Excel文件很简单,调用ExcelHelper对象的Export方法,此方法带四个参数,dtSource数据源,strHeaderText为Excel的标题,columnNames设置数据源的英文列名转换为中文名称,strFileName导出Excel文件名;
4.图表控件ZedGraph
参考资料:http://www.cnblogs.com/gaizai/archive/2010/02/22/1671154.html
ZedGraph 是一个开源的.NET图表类库, 全部代码都是用C#开发的。它可以利用任意的数据集合创建2D的线性和柱形图表。
ZedGraph 的类库具有很高的灵活性。几乎图表的每个层面都可以被用户修改。同时,为了保证类库的易用性,所有的图表属性都提供了缺省值。类库中包含的代码可以根据被划分的数据来选择适应的比例范围和步长、尺寸。 ZedGraph 继承了Framework中的UserControl接口,所以允许用户在VS 的IDE 环境中 进行拖放操作。
如下图,使用EFW框架画一个饼图,先从后台取出DataTable数据,再使用CakyGraphControl对象解析此数据,画出饼图绑定在界面上的Panel控件上;
总之上面只是整理一些系统中常用的功能组件,后续持续加强框架中的组件,把更强大更好的组件加入进来;