运行时动态创建报表(一)问题提出
来源:互联网 发布:域名转移流程 编辑:程序博客网 时间: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>'{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="test2" sql="select top 1000 barcode,regdate,category,wastation,printer from backcore where regdate>'{startdate}' and regdate <'{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>'{startdate}' and regdate <'{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>'{startdate}' and regdate <'{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>'{startdate}' and regdate <'{enddate}' and wastation>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>'{startdate}' and regdate <'{enddate}' and wastation>0 GROUP BY catename, DATEPART(hour, nonce)) as b 
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>
上面是报表定义文件
- 运行时动态创建报表(一)问题提出
- 运行时动态创建报表(二)他山之石
- 运行时动态创建报表(四)调用rdlc文件
- 运行时动态创建报表(五)报表设计器
- 运行时动态创建报表(三)rdlc报表文件结构与ReportDefinition类
- SVM(一)问题提出
- DevExpress.XtraReports 如何动态运行时创建报表
- DevExpress.XtraReports 如何动态运行时创建报表
- Windows 多线程一(问题提出)
- SVM(一) 问题的提出
- SVM(一) 问题的提出
- SVM(一) 问题的提出
- SVM(一) 问题的提出
- SVM(一) 问题的提出
- SVM(一)问题的提出
- SVM(一) 问题的提出
- SVM(一) 问题的提出
- SVM(一) 问题的提出
- 八、以二对十三
- heartbeat + ipvsadm + ldirectord 实现CentOS5.5上的web负载均衡
- 圣诞前夜_感悟
- ARM SWI 软中段 例程
- vim 替换^M
- 运行时动态创建报表(一)问题提出
- fgetc getc getchar fputc putc putchar
- 如何求两个有序数组的第K个数
- [转]Wine的一些相关原理
- How to Search?
- 第一次
- 成员函数指针与高性能的C++委托(下篇)
- RTEMS 的 AT91SAM9260 移植(5): 调试串口驱动
- Total Commander 7.56a