博客
关于我
如何在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卸载所有包
查看>>
python单线程下实现多个socket并发
查看>>
Python单元测试框架介绍(超详细~)
查看>>
Python单元测试框架
查看>>
python单元测试之unittest
查看>>
Python单元测试unittest实战
查看>>
Python单元测试-模拟VS补丁
查看>>
python协程实时输出_Python 协程以及事件循环的问题,怎么知道 IO 读取结束了呢?...
查看>>
Python十进制&;包提供错误的结果
查看>>
Python化身“安全老中医”:一键搞定工控系统漏洞,从零基础到精通,收藏这篇就够了!
查看>>
Python加速运行技巧
查看>>
python办公自动化基础遍历文件夹
查看>>
python办公自动化基础输出文件和文件夹
查看>>
python办公自动化基础搜索文件
查看>>
python知识:@classmethod和@staticmethod的异同
查看>>
python前端之css
查看>>
Python制作进度条,原来有这么多方法
查看>>
Python制作简单的学生成绩管理系统
查看>>
python制作甘特图的基本知识(附Demo)
查看>>
python制作一个简单的服务器,【Python】 做一个简单的 http 服务器
查看>>