轉帖|其它|編輯:郝浩|2011-10-26 14:48:37.000|閱讀 537 次
概述:上篇隨筆演示了在ActiveReport for .net中如何綁定數據源,例如DataSet,DataView。本文將通過一些示例代碼繼續演示如何綁定對象集合以及如何從對象集合或列表中提取數據。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
上篇隨筆演示了在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;
通過上面的示例可以看到,第二種方式雖然比較煩瑣,需要程序員自己處理很多東西,但是這樣程序員擁有完全的操控能力,特別是需要對取出的數據作很多復雜的處理時,這樣的操控能力是非常重要的。
在下一篇隨筆中,將展示如何使用子報表來作顯示主從表。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客園