在.NET中利用FORMULA ONE实现动态报表技术(一)

原创 2004年01月06日 22:10:00

Ø         .NET中利用FORMULA ONE实现动态报表技术()<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

         相信对大家Formula One (简称F1) 不会太陌生,它是一个优秀第三方报表制作控件,本人以前一直使用它与PB结合制作动态报表。现在有一.NET项目,有大量报表要实现,那么利用原先的FORMULA ONE制作的报表技术能否在.NET中继续延用呢? 经过几天的摸索终于把原来利用Formula One的动态报表解决方案完全的移植到.NET中。

         .NET调用COM组件基本原理

         在微软.NET通用语言运行时(CLR)中运行的代码称为托管代码,不在CLR中动行的代码被称为非托管代码。可以说所有的COM组件都是非托管代码。而托管代码组件不只依赖CLR,它们还要求与之交互的组件也要依赖于CLR。微软的解决方案是RCW(运行时可调用封装器)----用于从托管代码调用非托管代码的特殊类型的代理。下图显示了如果利用RCWs调用非托管组件。此图包括一个名为NetUI.exe.NET程序,两个名为BackEnd.dll Service.dllCOM组件,以及链接它们的必要技术。

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />CSDN_Dev_Image_2004-1-61617330.jpg

利用TLBIMP转换元数据

         并不是.NET首先使用元数据描述公有接口。COM类型库也有描述COM组件公用接口的元数据。其实RCW的功能主要是将COM类型的元数据转换为.NET的元数据。.NET FrameWork 软件开发工具包中有一工具tlbimp(类型库导入器)用来进行此转换。TlbImpCOM类型库中读取元数据并创建与CLR匹配部件以调用COM组件。

也可以利用VS.NET工具以便直接引用COM组件(其实仍然是利用RCW),下面例程使用此方法。

 

报表模板管理模块实例分析

下面以一个具体的报表模板管理模块为实例,说明怎么在.NET中利用Formula One 技术。

         说明:每一张定义的报表有一张对应的模板,模板可在外部利用Excel定义。模板管理是对报表对应的模板增、删、改进行管理的模块。

一、准备工作

1.   确认安装了VS.NET2002VS.NET2003

2.   安装或注册了F1

3.   安装了SQLSERVER并建Report_List_Data表,表结构如下:

CREATE REPORT_LIST_DATA

(

    NUM              INT                    NOT  NULL    , --主键

    RPT_ID      INT                 NOT  NULL    , --报表表号ID

    RPT_NAME    VARCHAR(60)         NOT  NULL    , --报表名

    RPT_DATA    IMAGE               NULL         , --报表内容

    USER_NAME   VARCHAR(40)         NULL         , --制表人

    RPT_DATE    DATETIME            NULL         , --报表日期

    CONSTRAINT T_RPT_LIB_PK PRIMARY KEY (NUM)

);

          二、界面设计

1.        选择工具箱àWindow窗体控件à添加/移除项àCOM组件,选择Tidestone Formula One 6.0 WorkBook

2.        新建一窗体,把新增加进入工具箱的F1控件,和一些相关的控件加入窗体,界面设计如下图所示:

CSDN_Dev_Image_2004-1-61617332.png

         三、系统设计及编码

1.  一打开模块,模块窗体组合框中检索出所有的数据库中的模板。

TemplateManger类构造函数中加入comboTemplateFillValue()函数,用来向组合框中填充数据

//向组合框中加入已经保存的模板名

         private void comboTemplateFillValue()

         {

              string strQuery = "Select rpt_id,rpt_name from report_list_data";

              SqlDataReader aReader = db.Query(strQuery);

              while(aReader.Read())

              {

                   comboTemplate.Items.Add(aReader[1].ToString()+"["+aReader[0].ToString()+"]");

              }

              aReader.Close();

         }

注:其中db.Query()为自定义的数据库操作基类中一查询方法。

2.      F1控件能完全兼容Excel格式文档,我们可以把模板利用大家都熟悉的Excel来定义模板,然后读入F1控件。在“读入模板”按键可加入如下脚本.

         private void btnRead_Click(object sender, System.EventArgs e)

         {

              if(openFileDialog1.ShowDialog() == DialogResult.OK)

              {

                   string tplName = openFileDialog1.FileName.ToString();

                  tplName = tplName.Remove(0,tplName.LastIndexOf("//")+1);

                   tplName = tplName.Substring(0,tplName.Length - 4);//去掉扩展名

                   //MessageBox.Show(FileName);

                   comboTemplate.Text = "模板"+tplName+"["+GetPKID("report_list_data","rpt_id").ToString()+"]";

                   //EXCEL Files

                   axF1Book1.ReadEx(openFileDialog1.FileName.ToString());

 

                   axF1Book1.ShowEditBar = true;

                   ShowVScrollBar();

                  

                   btnDel.Enabled = false;

              }

         }

注:1.读入的模板名命名方式为“模板”+“模板名称”+[模板ID]”形式

2. 主要语句为axF1Book1.ReadEx(openFileDialog1.FileName.ToString());功能是读取模板文件进入F1控件。

3. 脚本中GetPKID()函数的作用是取得模板唯一ID值,ShowVScrollBar();主要是保存F1控件滑动条一直存在

 

3. 读入的模块可以在控件中直接修改,也可以调用F1的服务端程序进行修改,调用服务端程序很简单.

         private void btnServer_Click(object sender, System.EventArgs e)

         {

              axF1Book1.AllowDesigner = true;

              axF1Book1.LaunchDesigner();

     }

 

 

F1Book Formula One 6 破解及应用程序实例

  • 2010年01月07日 15:28
  • 733KB
  • 下载

史上最全的Formula one的属性与方法

Formula one的属性与方法: 属性: l  showEditBar:是否显示单元编辑框; l  ShowEditBarCellRel:是否显示编辑单元的相关参数(单元号) l  She...
  • huangyongwang
  • huangyongwang
  • 2014年12月12日 09:33
  • 1260

PB导出数据excel格式dw2xls

PB导出数据excel格式dw2xls  使用DW2XLS控件 语法 uf_save_dw_as_excel ( dw, filename )  参数 dw A reference to ...
  • xuejiayue1105
  • xuejiayue1105
  • 2013年04月26日 21:18
  • 8154

hibernate中one-to-one两种配置方式

public class Person { private int id; private String name; private IdCard idCard; public Person...
  • Mr__fang
  • Mr__fang
  • 2013年02月19日 17:44
  • 19777

用Formula One开发的报表系统

  • 2006年02月23日 09:05
  • 1.42MB
  • 下载

ASP.NET+JQuery+.Ashx实现+百度Echarts 实现动态柱状图数据图形报表的统计

最终效果图如下:
  • kongwei521
  • kongwei521
  • 2014年09月09日 08:53
  • 16408

水晶报表 实现列的动态增加

  • 2009年11月19日 13:27
  • 276KB
  • 下载

广州传智播客.Net培训基础加强班 给你真正的技术

广州传智播客.Net培训基础加强班 给你真正的技术     很多初学编程的人总是对编程很恐惧,经常质疑自己“这么多东西我能学会吗?”,实际上编程就是“让计算机记住做事儿的步骤,然后由...
  • u010395024
  • u010395024
  • 2013年11月12日 15:07
  • 460

关于.NET报表动态添加图像

1,新建数据集用来存放图片   2,设置报表图像控件的属性,将MIMEType设置成存储图片的格式,Value设置选择表达式,选择数据集中相应的字段即可   3,对报表数据源实...
  • ares1986
  • ares1986
  • 2012年05月18日 08:38
  • 749

基于ASP.NET技术的动态IT培训网站的设计与实现

  • 2010年06月08日 11:24
  • 3.01MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在.NET中利用FORMULA ONE实现动态报表技术(一)
举报原因:
原因补充:

(最多只允许输入30个字)