开发自己的Excell控件

对于程序员特别是从事信息管理编程的程序员来说,报表打印是整个编程过程中最麻烦但又必须做的事情,我们常用的方法就是:
一、将数据库记录导出到 Excell 中;
二、用 CrystalReport 或 ActiveReport 等报表工具生成报表文件然后再在程序中调用;
三、直接打印窗体;

对于第一种方法网上有许多文章介绍了怎样将数据表记录导入到 Excell 中并怎样控件 Excell 单元格式以便做出合适的报表,但是这种方法也有许多不便之处,一是用户的计算机上必须安装 Excell ,这显然不现实 ( 当然盗版的另当别论 ) ,二是 Excell 自带的是 ActiveX 控件,虽然 .Net 仍支持 ActiveX 控件,但这与 .Net 的发展趋势显然是不相符的。
对于第二种方法网上与 CrystalReport 或 ActiveReport 相关的资料很少,而且使用也相当复杂,怎么制作报表全凭程序员自己摸索。
对于第三种方法除非想证明自己是菜鸟,否则没有人会使用。

既然如此,我们可不可以利用 .Net 提供的强大功能自己开发类似于 Excell 的控件呢?其实要开发一个控件只要做两件事,其一是定义各种属性和方法,其二是根据各种属性绘制控件界面。
下面我们来分析一下 Excell 的结构, Excell 呈现给我们的是一张二维结构的表格,每一行相当于数据表的一个记录,每一列相当于数据表的字段。但 Excell 的每个单元又有许多的格式控件单元的呈现方式,这就是 Excell 与别的表格控件如 DataGrid 不相同的地方,那么如何实现每个单元都有不同的呈现方式呢?

首先我们可以定义一个类名称假设为 DataCell ,这个类定义了各种属性比如:背景颜色、文本颜色、文本字体、对齐方式、文本折行、单元宽度、单元高度等等,然后我们定义一个 Arraylist 对象,名称假设为 DataRow ,一个 DataRow 加载适当数量的 DataCell 对象,这个 DataRow 对象就相当于 Excell 的一行记录。
第二步我们再定义一个 Arraylist 对象,名称假设为 DataTable ,每个 DataTable 又加载一定数量的 DataRow ,那么这个 DataTable 对象其实就是一个有一定数量记录的二维表格了,只是这个表格的单元都有不同的格式。
第三步就是绘制控件界面了,在这一步我们可以利用 Graphics 的 DrawString 、 DrawLine 、 DrawRectangle 、强大功能,根据 DataCell 对象提供的不同格式任意绘制控件界面了。
笔者根据上面的思路编制了一个类似于 Excell 的控件,虽然功能不如 Excell 强大,但对付一般的报表是足足有余了,您不想试试吗?
主页地址: Http://www.winfarsoft.com/
下载地址: Http://wwww.winfarsoft.com/richcell.exe

Published At
Categories with Web编程
Tagged with
comments powered by Disqus