本文將通過一些示例代碼繼續演示如何綁定對象集合以及如何從對象集合或列表中提取數據。
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;
通過上面的示例可以看到,第二種方式雖然比較煩瑣,需要程序員自己處理很多東西,但是這樣程序員擁有完全的操控能力,特別是需要對取出的數據作很多復雜的處理時,這樣的操控能力是非常重要的。