ActiveReports 报表控件所提供的两种报表模型页面报表和区域报表都支持集合对象数据源绑定,本文就主要讲解如何为以上两种报表模型设置集合对象数据源。
我们使用的实体类型 Product 共包含四个字段,代码如下:
/// <summary>
/// 产品
/// </summary>
public class Product{/// <summary>
/// 产品编号
/// </summary>
public int ID{ get; set; }/// <summary>
/// 产品名称
/// </summary>
public string Name{ get; set; }/// <summary>
/// 产品单价
/// </summary>
public float Price{ get; set; }/// <summary>
/// 产品库存
/// </summary>
public int Stock{ get; set; }}
(一)页面报表
1、在工程中添加一个名为 ListPageReport.rdlx 的页面报表
添加完成之后在解决方案窗口中选中 ListPageReport.rdlx 文件,并按下 F4 以打开该文件的属性窗口,在属性窗口中将“复制到输出目录”设置为“始终复制”
2、在报表资源管理器窗口中,鼠标右键单击“数据源”节点,并选择添加数据源菜单项
在出现的“报表数据源”对话框中,设置类型为“Object Provider”,点击“确定”按钮以完成添加数据源操作
3、返回到报表资源管理器中,在ListDataSource节点上鼠标单击右键,选择“添加数据集”菜单项
4、在出现的“数据集”对话框中,切换到“字段”选项卡页面,并添加与 Product 类型中同名的四个字段,如下
点击“确定”按钮以完成添加数据集操作,返回到报表资源管理器窗口中,可以看到 ListDataSet 节点下会显示我们添加的四个字段
至此,我们已经完成报表数据源的创建工作,接下来就设计报表界面以显示数据源数据
5、从VS工具箱中的 ActiveReports 7 页面布局报表分类中,将 Table 控件添加到报表设计界面,并设置每个单元格的对应的数据字段
6、完成全部报表设计工作之后,我们在 Form1 中添加 ActiveReports 报表浏览器控件 Viewer
7、在 Form1 的后台代码中加载 ListPageReport.rdlx 报表,并在 LocateDataSource 事件中为报表加载数据
private void Form1_Load(object sender, EventArgs e){GrapeCity.ActiveReports.PageReport report = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo("ListPageReport.rdlx"));GrapeCity.ActiveReports.Document.PageDocument document = new GrapeCity.ActiveReports.Document.PageDocument(report);
document.LocateDataSource += new GrapeCity.ActiveReports.LocateDataSourceEventHandler(document_LocateDataSource);
viewer1.LoadDocument(document);}void document_LocateDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args){if (args.DataSourceName == "ListDataSource" && args.DataSetName == "ListDataSet"){args.Data = GetData();}}private List<Product> GetData()
{List<Product> list = new List<Product>();
for (int i = 1; i <= 20; i++){list.Add(new Product(){ID=i,Name="产品"+i.ToString(),Price =i * 10f,Stock=i * 20});}return list;
}
(二)区域报表
1、在项目中添加名为 ListSectionReport.cs 的区域报表文件
2、在报表设计界面中的Detail区域中添加四个 TextBox 控件,分别设置其 DataField 属性为 ID,Name,Price,Stock
3、在Form1后台代码中加载 ListSectionReport 报表,并设置数据源
private void Form1_Load(object sender, EventArgs e){LoadSectionReport();}private void LoadSectionReport(){ListSectionReport rpt = new ListSectionReport();
rpt.DataSource = GetData();rpt.Run();viewer1.Document = rpt.Document;}
运行截图:
源码下载: