运行时动态创建报表(四)调用rdlc文件
2010-12-27 22:55
525 查看
前面介绍了如何创建rdlc文件,文件创建后如何调用呢。最容易想到的方法就是通过reportviewer的LocalReport.ReportPath属性直接加载rdlc文件,然后再通过reportviewer的LocalReport.DataSources.Add(new ReportDataSource(datasourcename,datasourcevale))来加载数据。rdlc文件已经创建完成,但是datasource怎么创建呢?如果每次有新的需求都要从新写代码创建datasource我们就失去了动态的意义。因此我们应该发明一种方法,不需要修改代码,只需要通过配置参数就可以实现datasource的创建。下面我们先来看看下面的内容
<?xml version="1.0" encoding="utf-8"?>
<page>
<datasource>
<connectionString name="conn2" text="Data Source=localhost;Initial Catalog=kshgold;Persist Security Info=True;User ID=sa;Password=76o5o1" providerName="System.Data.SqlClient">
</connectionString>
<connectionString name="ecq_hg1549147695" text="Data Source=localhost;Initial Catalog=ecq_FuZhou;Persist Security Info=True;User ID=sa;Password=76o5o1" providerName="System.Data.SqlClient" />
</datasource>
<rdlcdata name="1-8月份单证量数据(时间提取)" sql="select regdate,datepart(m,regdate) as months,datepart(qq,regdate) as quarters,datepart(dd,regdate) as days,case datepart(dw,regdate) when 1 then '星期日' when 2 then '星期一' when 3 then '星期二' when 4 then '星期三' when 5 then '星期四' when 6 then '星期五' when 7 then '星期六' end as weeks,datepart(hh,nonce) as inhours ,datepart(hh,endtime) as donehours,queueno,catename,wastation,logname from core where regdate>'{startdate}' and regdate <'{enddate}' and wastation>0 order by regdate " conn="conn2">
<params name="startdate" type="1" itemtype="" itemstr="" default="2009-01-01" dispcontent="开始时间" />
<params name="enddate" type="1" itemtype="" itemstr="" default="2009-02-01" dispcontent="结束时间" />
</rdlcdata>
<rdlcdata name="输入与处理总量" sql="SELECT DATEPART(hour, endTime) AS hr, ISNULL(COUNT(*), 0) AS countNum,'处理量' as typ FROM core where regdate>='{startdate}' and regdate <'{enddate}' and wastation>0 GROUP BY DATEPART(hour, endTime) union all SELECT DATEPART(hour, nonce) AS hr, ISNULL(COUNT(*), 0) AS countNum,'录入量' as type FROM core where regdate>='{startdate}' and regdate <'{enddate}' and wastation>0 GROUP BY DATEPART(hour, nonce)" conn="conn2">
<params name="startdate" type="1" itemtype="" itemstr="" default="2010-01-01" dispcontent="开始时间" />
<params name="enddate" type="1" itemtype="" itemstr="" default="2010-09-01" dispcontent="结束时间" />
</rdlcdata>
<rdlc name="月份类别接单分布" data="输入与处理总量" file="D:/学习/RptBuilder/rdlc/月份类别接单分布.rdlc" type="3" />
<rdlc name="日期类别接单情况" data="输入与处理总量" file="D:/学习/RptBuilder/rdlc/日期类别接单情况.rdlc" type="3" />
<rdlc name="原始数据查询" data="原始数据查询" file="D:/学习/RptBuilder/rdlc/原始数据查询.rdlc" type="0" />
</page>
上面xml文件定义了datasource、rdlc、rdlcdata三个节点,分别表示有哪些数据库连接、哪些rdlc文件、rdlc文件数据来源。
首先看datasource他只有connectionString 元素用来定义数据库的连接方式,目前我们只支持sql server数据库。
然后我们在看rdlc项,它有name、data、file、type四个属性,分别定义节点的名称、rdlc文件所需要的数据应对应的rdlcdata节点、rdlc文件路径、rdlc包含的报表项(0=table1,1=matrix,2=chart,3=复合)。
最后看rdlcdata节点,它有name、sql、conn属性,分别为节点的名称、获取数据的sql脚本、对应的数据连接(指向datasource)
同时此节点还包含若干params子节点,如果sql脚本中有where查询条件,我们就需要定义这些条件的值应该怎样获取,例如我们有时间类型的查询条件我们就要要求用户输入时间,如果有让客户选择的查询条件,我们就要为用户提供dropdownlist供用户选择。params节点就是用来完成此项定义的。它有name、type、itemtype、itemstr、default、dispcontent属性,分别表示节点名称、用来给用户输入查询条件的控件的类型0=textbox1,1=calender,2=dropdownlist,如果type=2那么就要定义dropdownlist内容的如何获得,这时我们就需要通过itemtype来定义dropdownlist数据源,0=通过数据库邦定,邦定数据的sql脚本在itemstr中给出;如果itemtype=1表示数据源为自定义数据源,我们通过itemstr给出。default属性表示默认值;dispcontent属性是显示给用户说明查询条件是什么,例如我们有需要输入开始日期和结束日期作为查询条件,我们就要告诉用户这两项分别是开始时间和结束时间。
有了上面的定义文件,我们就可以根据这个文件来做我们的程序了。下一篇文章我将介绍。
<?xml version="1.0" encoding="utf-8"?>
<page>
<datasource>
<connectionString name="conn2" text="Data Source=localhost;Initial Catalog=kshgold;Persist Security Info=True;User ID=sa;Password=76o5o1" providerName="System.Data.SqlClient">
</connectionString>
<connectionString name="ecq_hg1549147695" text="Data Source=localhost;Initial Catalog=ecq_FuZhou;Persist Security Info=True;User ID=sa;Password=76o5o1" providerName="System.Data.SqlClient" />
</datasource>
<rdlcdata name="1-8月份单证量数据(时间提取)" sql="select regdate,datepart(m,regdate) as months,datepart(qq,regdate) as quarters,datepart(dd,regdate) as days,case datepart(dw,regdate) when 1 then '星期日' when 2 then '星期一' when 3 then '星期二' when 4 then '星期三' when 5 then '星期四' when 6 then '星期五' when 7 then '星期六' end as weeks,datepart(hh,nonce) as inhours ,datepart(hh,endtime) as donehours,queueno,catename,wastation,logname from core where regdate>'{startdate}' and regdate <'{enddate}' and wastation>0 order by regdate " conn="conn2">
<params name="startdate" type="1" itemtype="" itemstr="" default="2009-01-01" dispcontent="开始时间" />
<params name="enddate" type="1" itemtype="" itemstr="" default="2009-02-01" dispcontent="结束时间" />
</rdlcdata>
<rdlcdata name="输入与处理总量" sql="SELECT DATEPART(hour, endTime) AS hr, ISNULL(COUNT(*), 0) AS countNum,'处理量' as typ FROM core where regdate>='{startdate}' and regdate <'{enddate}' and wastation>0 GROUP BY DATEPART(hour, endTime) union all SELECT DATEPART(hour, nonce) AS hr, ISNULL(COUNT(*), 0) AS countNum,'录入量' as type FROM core where regdate>='{startdate}' and regdate <'{enddate}' and wastation>0 GROUP BY DATEPART(hour, nonce)" conn="conn2">
<params name="startdate" type="1" itemtype="" itemstr="" default="2010-01-01" dispcontent="开始时间" />
<params name="enddate" type="1" itemtype="" itemstr="" default="2010-09-01" dispcontent="结束时间" />
</rdlcdata>
<rdlc name="月份类别接单分布" data="输入与处理总量" file="D:/学习/RptBuilder/rdlc/月份类别接单分布.rdlc" type="3" />
<rdlc name="日期类别接单情况" data="输入与处理总量" file="D:/学习/RptBuilder/rdlc/日期类别接单情况.rdlc" type="3" />
<rdlc name="原始数据查询" data="原始数据查询" file="D:/学习/RptBuilder/rdlc/原始数据查询.rdlc" type="0" />
</page>
上面xml文件定义了datasource、rdlc、rdlcdata三个节点,分别表示有哪些数据库连接、哪些rdlc文件、rdlc文件数据来源。
首先看datasource他只有connectionString 元素用来定义数据库的连接方式,目前我们只支持sql server数据库。
然后我们在看rdlc项,它有name、data、file、type四个属性,分别定义节点的名称、rdlc文件所需要的数据应对应的rdlcdata节点、rdlc文件路径、rdlc包含的报表项(0=table1,1=matrix,2=chart,3=复合)。
最后看rdlcdata节点,它有name、sql、conn属性,分别为节点的名称、获取数据的sql脚本、对应的数据连接(指向datasource)
同时此节点还包含若干params子节点,如果sql脚本中有where查询条件,我们就需要定义这些条件的值应该怎样获取,例如我们有时间类型的查询条件我们就要要求用户输入时间,如果有让客户选择的查询条件,我们就要为用户提供dropdownlist供用户选择。params节点就是用来完成此项定义的。它有name、type、itemtype、itemstr、default、dispcontent属性,分别表示节点名称、用来给用户输入查询条件的控件的类型0=textbox1,1=calender,2=dropdownlist,如果type=2那么就要定义dropdownlist内容的如何获得,这时我们就需要通过itemtype来定义dropdownlist数据源,0=通过数据库邦定,邦定数据的sql脚本在itemstr中给出;如果itemtype=1表示数据源为自定义数据源,我们通过itemstr给出。default属性表示默认值;dispcontent属性是显示给用户说明查询条件是什么,例如我们有需要输入开始日期和结束日期作为查询条件,我们就要告诉用户这两项分别是开始时间和结束时间。
有了上面的定义文件,我们就可以根据这个文件来做我们的程序了。下一篇文章我将介绍。
相关文章推荐
- 运行时动态创建报表(三)rdlc报表文件结构与ReportDefinition类
- DevExpress.XtraReports 如何动态运行时创建报表
- C# Window编程随记——运行时动态对象创建和动态方法调用
- C++ Builder中创建与调用动态库文件小结
- RDLC报表 在WinForm里运行出现 未能加载文件或程序集microsoft.reportviewer.winforms
- DevExpress.XtraReports 如何动态运行时创建报表
- ReportViewer动态加载RDLC报表文件
- RDLC报表 在WinForm里运行出现 未能加载文件或程序集microsoft.reportviewer.winforms
- DevExpress.XtraReports 如何动态运行时创建报表
- DevExpress.XtraReports 如何动态运行时创建报表
- jquery动态创建div,调用dialog方法显示远程iframe文件,封装jquery方法
- C# 动态生成RDLC报表文件
- 运行时动态创建报表(一)问题提出
- C++中动态链接库文件创建与调用
- java 解决调用c语言实现简单HelloWorld函数生成.dll动态链接库的32位dll文件无法在64位机上运行
- 运行时动态创建报表(二)他山之石
- 动态创建rdlc报表,绑定任意Dataset
- RDLC报表 在WinForm里运行出现 未能加载文件或程序集microsoft.reportviewer.winforms
- 使用myeclipse创建的birt 报表文件放在eclipse环境运行
- 生成动态报表的Java项目打成.jar包文件运行时出错