ActiveReports 9实战教程(2): 准备数据源(设计时、运行时)
原文:ActiveReports 9实战教程(2): 准备数据源(设计时、运行时)
在上讲中《ActiveReports 9实战教程(1): 手把手搭建环境Visual Studio 2013 社区版》,我们已经结合Visual Studio 2013搭建好了ActiveReports 9的开发环境,并完成了一个Hello World的RDL报表。 在本文,我们通过配置数据源进行报表实战,做过报表开发的报表达人知道,报表中的数据源分设计时数据源和运行时数据源。 如何理解呢?

这2类数据源,表结构是一样的,用途不一样:
1 设计时数据源,用于研发内部、报表小组进行配置、测试报表用。
2 运行时数据源,用于系统割接后在局方现场运行报表系统,如修改链接数据库的字符串。
从上面2点可看出,设计时数据源的运行比较广:配置报表、测试、运行报表。而运行时数据库切换数据库链接字符串即可无缝实现数据源在用户现场部署,相对比较容易。
下面用NWind_CHS.mdb数据源进行实战(AR9安装后,自带的数据源C:\Users\rogerwang\Documents\ComponentOne Samples\ActiveReports 9\Data\NWIND.mdb)。
设计时数据源
通过“视图--其他窗口--报表资源管理器 V9”,然后基于上讲的RdlReport1.rdlx文件,双击rdlx文件。

右键,添加数据源

在新创建的数据源DataSource1,右键添加数据集。

在弹出的添加数据集中,有2种办法添加数据。

方法一: 直接写SQL。 这种方式适合程序员、SQL比较强的人, 效率高。
方法二: 通过AR9新提供的VQD进行(可视化查询设计器)。这种方法适合产品经理、需求分析师等对技术不细究的人,灵活。
这里重点说一下方法二:VQD。
可视化查询设计器(VQD)包含以下关键特性:
- 过滤数据
- 使用自定义表达式
- 从数据库选择字段
- 分组和合计函数
- 使用内连接,左外连接和右外连接
- 设置已选字段和数据表的别名
- 数据排序和更多特性

生成的SQL语句:
select Products.*, Categories.* from Products inner join Categories on Products.CategoryID = Categories.CategoryID

如分别拖动Description、ProductID到报表,预览结果:


至此,完成了运行时数据源的添加,AR提供的配置数据源功能,非常灵活和方便,可有效的提高报表开发效率。
运行时数据源
我们在设计时配置的数据源,如果要迁移到用户现场,则需要可以动态修改数据源以适配用户的数据源环境。
可通过代码实现数据源切换(备注:数据库表结构是一模一样的)
private void 运行时数据源区域报表ToolStripMenuItem_Click(object sender, EventArgs e)
{
SectionReport_DataSource_RunTime sReport1 = new SectionReport_DataSource_RunTime();
sReport1.DataSource = GetDataSource();
sReport1.Run();
viewer1.Document = sReport1.Document;
} private DataTable GetDataSource()
{
DataTable dt = new DataTable();
dt.Columns.Add("产品编号");
dt.Columns.Add("产品名称");
dt.Columns.Add("单价");
dt.Columns.Add("库存量");
dt.Rows.Add("A10002", "苹果", 20, 50);
dt.Rows.Add("A15681", "香蕉", 20, 50);
dt.Rows.Add("A15681", "菠萝", 20, 50);
return dt;
}
在运行时通过 DataSource 属性设置数据源
private void 运行时数据源页面报表ToolStripMenuItem_Click(object sender, EventArgs e)
{
GrapeCity.ActiveReports.PageReport pReport1 = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo("PageReport_DataSource_RunTime.rdlx"));
viewer1.LoadDocument(pReport1.Document);
}
private void Form1_Load(object sender, EventArgs e)
{
viewer1.LocateDataSource += new GrapeCity.ActiveReports.LocateDataSourceEventHandler(viewer1_LocateDataSource);
}
void viewer1_LocateDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
{
if (args.DataSourceName == "DataSource1")
{
if (args.DataSetName == "DataSet1")
{
args.Data = GetDataSource();
}
}
}
private DataTable GetDataSource()
{
DataTable dt = new DataTable();
dt.Columns.Add("产品编号");
dt.Columns.Add("产品名称");
dt.Columns.Add("单价");
dt.Columns.Add("库存量");
dt.Rows.Add("A10002", "苹果", 20, 50);
dt.Rows.Add("A15681", "香蕉", 20, 50);
dt.Rows.Add("A15681", "菠萝", 20, 50);
return dt;
}
在运行时通过 LocateDataSource 事件加载数据源。
最后,顺便说一下:ActiveReport 可以和多种数据源交互,包括OLEDB, SQL, XML,Oracle、Sybase、Informix、SQL Server等。
参考的官方博客:
- ActiveReports报表数据源:设计时数据源
- ActiveReports报表数据源:运行时数据源
- 【ActiveReports】使用REST Web Service数据
- AR 7 绑定数据源方式
- 绑定Oracle Database 到 ActiveReport
ActiveReports 9实战教程(2): 准备数据源(设计时、运行时)的更多相关文章
- ActiveReports 9实战教程(2): 准备数据源(设计时、执行时)
在上讲中<ActiveReports 9实战教程(1): 手把手搭建好开发环境Visual Studio 2013 社区版>,我们已经结合Visual Studio 2013搭建好了Act ...
- ActiveReports 9实战教程(3): 图文并茂的报表形式
基于上面2节内容,我们搭建了AR9的开发环境,配置好了数据源.在本节,我们以官方提供的3个中文图文并茂的报表来展示AR9的功能,并通过实战的方式一一分享. 以往做报表相关的工作时,最害怕的是报表的UI ...
- ActiveReports 9实战教程(1): 手把手搭建环境Visual Studio 2013 社区版
原文:ActiveReports 9实战教程(1): 手把手搭建环境Visual Studio 2013 社区版 ActiveReports 9刚刚发布3天,微软就发布了 Visual Studio ...
- ActiveReports报表数据源:运行时数据源
ActiveReports 支持在设计时和运行时设置报表数据源,本文将重点介绍如何在运行时为区域报表和RDL/页面报表设置报表数据源. ·第一步: 在工程中创建一个名为 SectionReport_D ...
- BI之SSAS完整实战教程2 -- 开发环境介绍及多维数据集数据源准备
上一篇我们已经完成所有的准备工作,现在我们就开始动手,通过接下来的三篇文章创建第一个多维数据集. 传统的维度和多维数据集设计方法主要是基于现有的单源数据集. 在现实世界中,当开发商业智能应用程序时,很 ...
- 《ElasticSearch6.x实战教程》之实战ELK日志分析系统、多数据源同步
第十章-实战:ELK日志分析系统 ElasticSearch.Logstash.Kibana简称ELK系统,主要用于日志的收集与分析. 一个完整的大型分布式系统,会有很多与业务不相关的系统,其中日志系 ...
- BI之SSAS完整实战教程7 -- 设计维度、细化维度中 :浏览维度,细化维度
上篇文章我们已经将Dim Geography维度设计好. 若要查看维度的成员, AS需要接收该维度的详细信息(包括已创建的特性.成员属性以及多级层次结构), 通过XMLA与AS的实例进行通信. 今天我 ...
- BI之SSAS完整实战教程6 -- 设计维度、细化维度上:创建维度定义特性关系
前面我们使用过数据源向导.数据源视图向导.Cube向导来创建相应的对象. 本篇我们将学习使用维度向导来创建维度. 通过前面几个向导的学习,我们归纳一下共同点,主要分成两步 1. 使用某种对象类型的向导 ...
- BI之SSAS完整实战教程4 -- 部署至SSAS进行简单分析
上一篇已经创建了多维数据集的结构. 接下来我们将多维数据集的架构定义发送到Analysis Services实例,部署到AS上去. 文章提纲 部署和浏览多维数据集 SSMS使用简介 总结 一.部署和浏 ...
随机推荐
- sdut 上机练习8面向对象编程(对象的数组)
上机练习8面向对象编程(对象的数组) Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 利用类对象数组完毕N个学生数据(学号是字符串类型.成绩是整型)的输入 ...
- Java操作memcached(一)
Memcached事实上,两次Hash算法 第一次hash算法被用于定位Memcached示例 第二次hash算法是底部HashMap中间hash算法 Hash算法 1.依据余数 ...
- boostrap-非常好用但是容易让人忽略的地方------input-group-btn
1.正常的使用 <div class="form-group"> <div class="input-group"> <input ...
- ipset高大上性能果断将nf-HiPac逼下课
netfilter.sourceforge,github上有一个凄凉的项目,那就是nf-hipac.这个以前给Linux firewall设计带来希望的项目早在2005年就停止了更新和维护,而我本人则 ...
- Oracle压缩总结2—
估计表压缩效应
使用压缩前,我们可以估算压缩能有多大效果. 11gr2我已经能够使用dbms_comp_advisor,具体代码见附件.只需要运行两个文件dbmscomp.sql和prvtcomp.plb.然后使用D ...
- SSH深度历险(三) EJB Session Bean有状态和无状态的差别与联系
刚開始对两种sessionbean存在误解.觉得有状态是实例一直存在,保存每次调用后的状态,并对下一次调用起作用.而觉得无状态是每次调用实例化一次,不保留用户信息.细致分析并用实践检验后,会发现,事实 ...
- opencv在arm和x86在移植
一个.开发环境 操作系统:fedora14 Opencv版本号:2.0 Qt版本号:4.7 arm:mini6410 交叉编译工具:arm-linux-gcc-4.5.1 二.安装与配置 Linux系 ...
- Ajax 实现无刷新页面
注意:如本文所用,在前面的文章库的数目可以在源代码中找到,我将指示在文本,其中链路,为了缩短制品的长度,阅读由此带来的不便.乞求被原谅. 评论文章 Ajax 实现无刷新页面.其原理.代码库.代码. 这 ...
- 一张地图告诉你,只JavaScript不够!
这将是JavaScript语法,你真的会一JavaScript嘛.看看这个图片!超好用JavaScript一本书的摘录游.熊儿.快去学习! 版权声明:本文博客原创文章.博客,未经同意,不得转载.
- 网络资源(7) - JAX-WS视频
2014_08_25 http://v.youku.com/v_show/id_XNjMzNDcyMTk2.html 基于JAX-WS编程模型的WebService 1. @WebService注释类 ...
