上篇随笔演示了在ActiveReport for .net中如何绑定数据源,例如DataSet,DataView。本文将通过一些示例代码继续演示如何绑定对象集合以及如何从对象集合或列表中提取数据。
1. 直接绑定:
我们可以自己定义一个Collection,从IList继承,并使其中的每个对象都是一个实体,例如:
Customer和CustomerCollection。然后给ActiveReport报表的DataSource直接赋值为CustomerCollection的实例就可以了。这种绑定方法在ActiveReport for .net自带的例子里有完整的演示。
2. 手工加载显示对象的数据:
在这里要用到两个事件:DataInitialize和FetchData。
DataInitialize用来定义字段列表,获取数据等工作,FetchData用来指定每个字段的值。
我们简单定义一个Customer类
public class Customer
{
public int ID;
public string Name;
public string Address;
}
再给报表定义一个Customer数组,用来保存要显示的数据,比如:
public Customer[] customers;
还需要一个值来保存当前记录的索引:private int index =0;
接下来在DataInitialize中定义报表有那些字段:
this.Fields.Add("Name");
this.Fields.Add("Address");
然后在FetchData事件中添加以下代码:
if (this.index >= this.customers.Length )
{
eArgs.EOF = true;
return;
}
else
{
eArgs.EOF = false;
}
this.Fields["Name"].Value = customers[this.index].Name;
this.Fields["Address"].Value = customers[this.index].Address;
this.index += 1;
这段代码的含义就是将Customer数组中的每个Customer实例的Name和Address属性值赋给报表的Name和Address字段。
代码中的第一个if分支是判断是否已经加载到了最后一条数据,如果是,设置eArgs.EOF为ture,并返回,否则继续加载下一条数据。
然后我们可以将要显示的数据放在Customers数组中,并启动显示报表:
Customer[] customers = new Customer[2];
Customer c = new Customer();
c.Name = "James";
c.Address = "Noljadfallsjf";
Customer c2 = new Customer();
c2.Name = "Joe";
c2.Address = "adfaafadf";
customers[0] = c;
customers[1] = c2;
rpt.customers = customers;
rpt.Run();
this.viewer1.Document = rpt.Document;
通过上面的示例可以看到,第二种方式虽然比较烦琐,需要程序员自己处理很多东西,但是这样程序员拥有完全的操控能力,特别是需要对取出的数据作很多复杂的处理时,这样的操控能力是非常重要的。
在下一篇随笔中,将展示如何使用子报表来作显示主从表。
关于葡萄城
葡萄城是专业的软件开发技术和低代码平台提供商,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务,一站式满足开发者需求,帮助企业提升开发效率并创新开发模式。葡萄城开发技术始于1980年,40余年来始终聚焦软件开发技术,有深厚的技术积累和丰富的产品线。是业界能够同时赋能软件开发和低代码开发的企业。凭借过硬的产品能力、活跃的用户社区和丰富的伙伴生态,与超过3000家合作伙伴紧密合作,产品广泛应用于信息和软件服务、制造、交通运输、建筑、金融、能源、教育、公共管理等支柱产业。
葡萄城热门产品
活字格
打通现有软件,快速定制面向未来的个性化应用

SpreadJS
可嵌入您系统的在线Excel的纯前端表格控件

Wyn商业智能
可与企业自有系统深度集成,增强数据分析的 BI 工具
