博客
关于我
如何在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/

你可能感兴趣的文章
Oracle 在Sqlplus 执行sql脚本文件。
查看>>
Oracle 如何处理CLOB字段
查看>>
oracle 学习
查看>>
oracle 定义双重循环例子
查看>>
ORACLE 客户端工具连接oracle 12504
查看>>
Oracle 常用命令
查看>>
Oracle 序列sequence 开始于某个值(10)执行完nextval 发现查出的值比10还小的解释
查看>>
oracle 数据库dg搭建规范1
查看>>
oracle 时间转化函数及常见函数 .
查看>>
Oracle 权限(grant、revoke)
查看>>
oracle 查询clob
查看>>
Oracle 比较 B-tree 和 Bitmap 索引
查看>>
UML- 组件图(构件图)
查看>>
oracle 监听器的工作原理
查看>>
oracle 行转列
查看>>
Oracle 表
查看>>
oracle 课堂笔记
查看>>
Oracle 返回结果集的 存储过程
查看>>
Oracle 递归
查看>>
Oracle 递归函数与拼接
查看>>