博客
关于我
如何在CRM系统中集成ActiveReports最终报表设计器
阅读量:456 次
发布时间:2019-03-06

本文共 6440 字,大约阅读时间需要 21 分钟。

如何在业务系统中集成设计器并构造报表模板

在业务系统中集成设计器时,为用户提供灵活的数据表创建机制,使用户无需深入了解后台逻辑和代码,只需选择关联的数据表,系统即可自动生成可供用户直接使用的数据集。本文将详细讲解如何构造三种报表模板,并阐述DataRelation类在动态绑定数据集中的应用。

一、构造报表模板

1. 创建RDL报表使用PageReport对象并添加必要属性:

public static void BuildRdlReportLayout(Design.Designer designer){    PageReport report = new PageReport();    report.Report.Body.Height = "5cm";    report.Report.Width = "20cm";    report.Load(new StringReader(report.ToRdlString()));    // report = LayoutBuilder.AddDataSetDataSource(report); // 添加数据源    report = LayoutBuilder.addDataSet(report);    MemoryStream reportStream = LayoutBuilder.LoadReportToStream(report);    reportStream.Position = 0;    designer.LoadReport(XmlReader.Create(reportStream), DesignerReportType.Page);}

2. 创建页面报表页面报表采用字符串构造方式,避免默认生成RDL报表:

public static void BuildPageReportLayout(Design.Designer designer){    PageReport report = new PageReport();    report.Load(new StringReader(@"
27.9cm
2.5cm
2.5cm
27.9cm
21.6cm
2.5cm
2.5cm
")); report = LayoutBuilder.AddDataSetDataSource(report); MemoryStream reportStream = LayoutBuilder.LoadReportToStream(report); reportStream.Position = 0; designer.LoadReport(XmlReader.Create(reportStream), DesignerReportType.Page);}

3. 页面报表与RDL报表的数据集绑定由于页面报表和RDL报表在代码层面上是相同的,均可视为PageReport,因此绑定数据集的方法相同:

public static PageReport AddDataSetDataSource(PageReport report){    // 创建数据源    DataSource dataSource = new DataSource();    dataSource.Name = "Reels Database";    dataSource.ConnectionProperties.DataProvider = "DATASET";    dataSource.ConnectionProperties.ConnectString = "";        // 创建数据集    DataSet dataSet = new DataSet();    Query query = new Query();    dataSet.Name = "Sample DataSet";    query.DataSourceName = "Reels Database";    query.CommandType = QueryCommandType.Text;    query.CommandText = "";    String[] fieldsList = { "MoviedID", "Title", "YearReleased", "MPAA" };        foreach (string fieldName in fieldsList)    {        Field field = new Field(fieldName, fieldName, null);        dataSet.Fields.Add(field);    }        // 将数据源和数据集添加到报告    report.Report.DataSources.Add(dataSource);    report.Report.DataSets.Add(dataSet);    return report;}

4. 创建区域报表并添加数据区域报表的构造方式与页面报表类似:

public static void BuildSectionReportLayout(Design.Designer designer){    string rpx = "
"; DataTable dt = new DataTable(); dt.Columns.Add("Col1"); dt.Columns.Add("Col2"); dt.Columns.Add("Col3"); designer.Report = null; designer.LoadReport(XmlReader.Create(LayoutBuilder.CovertStringToStream(rpx)), DesignerReportType.Section); SectionReport sr2 = designer.Report as SectionReport; sr2.DataSource = dt;}

5. 修改ReportsForm_Load方法在设计器中加载报表后,用户可通过预览按钮查看实时数据:

LayoutBuilder.BuildRdlReportLayout(this.reportDesigner);// 添加预览按钮fileMenu.DropDownItems.Add(new ToolStripMenuItem("预览", null, new EventHandler(OnViewReport)));// 实现预览功能private void OnViewReport(object sender, EventArgs e){    ReportViewer viewer = new ReportViewer();    viewer.Report = reportDesigner.Report;    viewer.ReportType = reportDesigner.ReportType;    viewer.ShowDialog();}// 获取数据集并绑定字段private void LoadDataSet(object sender, LocateDataSourceEventArgs args){    string constr = @"Provider=sqloledb; password=xA123456;data source=10.32.2.28;initial catalog=NWind_CHS;user id=sa;";        DataSet myDataSet = new DataSet();    DataTable[] myDataTables = new DataTable[3];    myDataTables[0] = new DataTable(Constants.SaleTableName);    myDataTables[1] = new DataTable(Constants.SaleDetailsTableName);    myDataTables[2] = new DataTable(Constants.CustomerTableName);        myDataSet.Tables.Add(myDataTables[0]);    OleDbDataAdapter oleAdapter1 = new OleDbDataAdapter(Constants.cmdText1, new OleDbConnection(constr));    oleAdapter1.Fill(myDataSet.Tables[0]);        myDataSet.Tables.Add(myDataTables[1]);    OleDbDataAdapter oleAdapter2 = new OleDbDataAdapter(Constants.cmdText2, new OleDbConnection(constr));    oleAdapter2.Fill(myDataSet.Tables[1]);        myDataSet.Tables.Add(myDataTables[2]);    OleDbDataAdapter oleAdapter3 = new OleDbDataAdapter(Constants.cmdText3, new OleDbConnection(constr));    oleAdapter3.Fill(myDataSet.Tables[2]);        // 创建DataRelation实例    DataRelation Customers_Orders = new DataRelation("C_O", myDataSet.Tables[2].Columns["客户ID"],         myDataSet.Tables[0].Columns["客户ID"]);    myDataSet.Relations.Add(Customers_Orders);        DataRelation Orders_OrderDetails = new DataRelation("O_OD", myDataSet.Tables[0].Columns["订单ID"],         myDataSet.Tables[1].Columns["订单ID"]);    myDataSet.Relations.Add(Orders_OrderDetails);        args.Data = myDataSet.Tables[0];}

以上内容详细介绍了如何构造三种报表模板,并阐述了DataRelation类在动态绑定数据集中的应用。通过以上方法,用户可以轻松地设计满足需求的报表,并通过预览功能查看实时数据。

转载地址:http://yjyfz.baihongyu.com/

你可能感兴趣的文章
python 使用execjs 报编码错误解决办法,UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 145: il
查看>>
python 使用filetype校验文件
查看>>
Python 使用flush函数将缓冲区数据立即写磁盘
查看>>
python 使用in判断不准确,in不好使
查看>>
Python 使用pandas 进行查询和统计详解
查看>>
Redis 配置文件redis.conf详细解释
查看>>
python网络爬虫(2)——scrapy框架的基础使用
查看>>
python网络爬虫实例教程试读_Python网络爬虫实战教程(全套完整版) - 学途无忧网 - 做技术的王者 - Powered By EduSoho...
查看>>
Python 使用哈希函数用于加密
查看>>
Python 依赖管理的革新——Poetry 深度解析
查看>>
python 保留精度及增加去除数字的千位分隔符(金额化数字)
查看>>
python 倒计时 9,8,7,。。。。。。0
查看>>
Python 入门开发学习笔记之数据的增删改查
查看>>
Python 入门教程(2)搭建环境 2.4、VSCode配置Node.js运行环境
查看>>
Python 八大排序算法合集
查看>>
python 关于epoll的学习
查看>>
Python 内存管理
查看>>
Python 内嵌函数:它们有什么用处?
查看>>
Python 内置 sum 函数 vs. for 循环性能
查看>>
python 内置slice的用法
查看>>