运行时动态创建报表(一)问题提出

来源:互联网 发布:域名转移流程 编辑:程序博客网 时间:2024/05/16 11:07

很多时候,客户可能随时提出新的报表要求,我们不得不再修改代码创建新的报表。因此我们会想,可不可以设计一个架构,只修改后台的定义文件,客户端就可以根据定义文件展现不同的报表。网上已经有了很多利用ms 的reportviewer动态创建报表的介绍。我在研究这些文章后觉得,完全可以实现上面的设想。目前已经设计了一套简单的架构,主要分为数据定义部分,报表设计部分,报表显示部分。我会在后面的文章陆续通过实例介绍,感兴趣的朋友可以参考。本系统的主要界面如下

 

                                                               报表设计程序

 

                                                                    根据设计产生的报表项

<?xml version="1.0" encoding="utf-8"?>
<page>
  <datasource>
    <connectionString name="conn2" text="Data Source=localhost;Initial Catalog=dzpd;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-9月份时间单证量数据" sql="select regdate,datepart(m,regdate) as months,datepart(qq,regdate) as quarters,datepart(dd,regdate) as days,datepart(dw,regdate) as weeks,datepart(hh,nonce) as inhours ,datepart(hh,endtime) as donehours,queueno,catename,wastation,logname from backcore where regdate&gt;'{startdate}' and regdate &lt;'{enddate}'  and wastation&gt;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="test2" sql="select top 1000 barcode,regdate,category,wastation,printer from backcore where regdate&gt;'{startdate}' and regdate &lt;'{enddate}' " conn="conn2">
    <params name="startdate" type="1" itemtype="" itemstr="" default="2001-10-01" dispcontent="开始时间" />
    <params name="enddate" type="1" itemtype="" itemstr="" default="2009-10-01" dispcontent="结束时间" />
  </rdlcdata>
  <rdlcdata name="test3" sql="select top 1000 barcode,regdate,category,wastation,printer from backcore where regdate&gt;'{startdate}' and regdate &lt;'{enddate}' " file="D:/学习/RptBuilder/rdlc/test3.rdlc" conn="conn2">
    <params name="startdate" type="1" itemtype="" itemstr="" default="2008-01-01" dispcontent="开始时间" />
    <params name="enddate" type="1" itemtype="" itemstr="" default="2009-10-01" dispcontent="结束时间" />
  </rdlcdata>
  <rdlcdata name="test4" sql="select top 1000 barcode,regdate,category,wastation,printer from backcore where regdate&gt;'{startdate}' and regdate &lt;'{enddate}' and category={category}" file="D:/学习/RptBuilder/rdlc/test4.rdlc" conn="conn2">
    <params name="startdate" type="1" itemtype="" itemstr="" default="2008-01-01" dispcontent="开始时间" />
    <params name="enddate" type="1" itemtype="" itemstr="" default="2010-01-01" dispcontent="结束时间" />
    <params name="category" type="2" itemtype="sql" itemstr="select contents,category from categry order by category" default="5" dispcontent="业务类别" />
  </rdlcdata>
  <rdlc name="1-9月份月份柜台单证量矩阵" data="1-9月份输入与处理量" file="D:/学习/RptBuilder/rdlc/1-9月份月份柜台单证量矩阵.rdlc" type="2" />
  <rdlc name="1-9月份月份关员单证量矩阵" data="1-9月份时间单证量数据" file="D:/学习/RptBuilder/rdlc/1-9月份月份关员单证量矩阵.rdlc" type="1" />
  <rdlc name="1-9月份月份类别单证量折线图" data="1-9月份时间单证量数据" file="D:/学习/RptBuilder/rdlc/1-9月份月份类别单证量折线图.rdlc" type="2" />
  <rdlc name="1-9月份月份柜台单证量折线图" data="1-9月份时间单证量数据" file="D:/学习/RptBuilder/rdlc/1-9月份月份柜台单证量折线图.rdlc" type="2" />
  <rdlc name="1-9月份月份关员单证量折线图" data="1-9月份时间单证量数据" file="D:/学习/RptBuilder/rdlc/1-9月份月份关员单证量折线图.rdlc" type="2" />
  <rdlc name="1-9月份月份日期单证量分布图" data="1-9月份时间单证量数据" file="D:/学习/RptBuilder/rdlc/1-9月份月份日期单证量分布图.rdlc" type="2" />
  <rdlc name="1-9月份月份时段单证量分布表" data="1-9月份时间单证量数据" file="D:/学习/RptBuilder/rdlc/1-9月份月份时段单证量分布表.rdlc" type="1" />
  <rdlc name="1-9月份月份星期单证量折线图" data="1-9月份时间单证量数据" file="D:/学习/RptBuilder/rdlc/1-9月份月份星期单证量折线图.rdlc" type="2" />
  <rdlc name="1-9月份录入与处理单证量表" data="1-9月份输入与处理量" file="D:/学习/RptBuilder/rdlc/1-9月份录入与处理单证量表.rdlc" type="2" />
  <rdlcdata name="1-9月份输入与处理量" sql="select a.catename as catename,a.hr as donehr,a.countnum as donecount,b.hr as inhr,b.countnum as incount from (SELECT catename, DATEPART(hour, endTime) AS hr, ISNULL(COUNT(*), 0)  AS countNum FROM backcore where regdate&gt;'{startdate}' and regdate &lt;'{enddate}' and wastation&gt;0  GROUP BY catename, DATEPART(hour, endTime)) as a left join (SELECT catename, DATEPART(hour, nonce) AS hr, ISNULL(COUNT(*), 0) AS countNum FROM backcore where regdate&gt;'{startdate}' and regdate &lt;'{enddate}' and wastation&gt;0 GROUP BY catename, DATEPART(hour, nonce)) as b &#xD;&#xA;on a.catename=b.catename and a.hr=b.hr order by catename" 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>
</page>

                                                上面是报表定义文件

原创粉丝点击