您的位置:首页 > 其它

运行时动态创建报表(四)调用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属性是显示给用户说明查询条件是什么,例如我们有需要输入开始日期和结束日期作为查询条件,我们就要告诉用户这两项分别是开始时间和结束时间。

有了上面的定义文件,我们就可以根据这个文件来做我们的程序了。下一篇文章我将介绍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: