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

本文共 6534 字,大约阅读时间需要 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/

你可能感兴趣的文章
Objective-C实现double hash双哈希算法(附完整源码)
查看>>
Objective-C实现double linear search recursion双线性搜索递归算法(附完整源码)
查看>>
Objective-C实现double linear search 双线性搜索算法(附完整源码)
查看>>
Objective-C实现double sort双重排序算法(附完整源码)
查看>>
Objective-C实现DoublyLinkedList双链表的算法(附完整源码)
查看>>
Objective-C实现DoublyLinkedList双链表算法(附完整源码)
查看>>
Objective-C实现DPLL(davisb putnamb logemannb loveland)算法(附完整源码)
查看>>
Objective-C实现DWT离散小波变换(附完整源码)
查看>>
Objective-C实现Edmonds-Karp算法(附完整源码)
查看>>
Objective-C实现EEMD算法(附完整源码)
查看>>
Objective-C实现elgamal 密钥生成器算法(附完整源码)
查看>>
Objective-C实现EM算法(附完整源码)
查看>>
Objective-C实现EM算法(附完整源码)
查看>>
Objective-C实现entropy熵算法(附完整源码)
查看>>
Objective-C实现euclidean distance欧式距离算法(附完整源码)
查看>>
Objective-C实现Euclidean GCD欧几里得最大公约数算法(附完整源码)
查看>>
Objective-C实现euclideanDistance欧氏距离算法(附完整源码)
查看>>
Objective-C实现euler method欧拉法算法(附完整源码)
查看>>
Objective-C实现euler modified变形欧拉法算法(附完整源码)
查看>>
Objective-C实现eulerianPath欧拉路径算法(附完整源码)
查看>>