前天Insus.NET實現《動態合並GridView數據行DataRow的列》。今天再玩玩Repeater控件,功能也是動態合並某列欄位。
Repeater控件跟GridView控件一樣集成度高,越是自由與松散的,在合並時,越是不好控制。
我們在網站上,創建一個網頁,拉Repeater控件至網頁:
去.aspx.cs為Repeater控件綁定數據,數據庫表格,存儲過程,以及連接數據庫獲取數據,在此不提供。
瀏覽效果:
OK,我們開始實現合並數據列,博文開始有提及,由於Repeater控件與GridVeiw控件有很大不一樣,合並方法也沒有什么參考可言。但有一點是相同的地方,合並的事件還是有ItemCreated中進行。
上圖中為Repeater控件添加OnItemCreated="RepeaterFruit_ItemCreated"事件,拿掉原ItemTemplate模版內的html,用Literal控件來替代。也就是說,所有數據行均在后台OnItemCreated="RepeaterFruit_ItemCreated"事件中動態產生。
去.aspx.cs定義兩個頁面級的變量,參考下圖#1部分代碼。而#2部分代碼塊,是從數據源分析出合並列中,每個可合並的字段所占有幾行數據,並填充入Dictionary<string,int>集合中。
下面開始寫OnItemCreated事件:
#1代碼行,是從集合中,獲取匹配當前數據行合並列有幾行可合並。
#2代碼塊,如果只有一行,就不必做任何合並動作,原原本本產生一行數據即可。
#3代碼塊,如果遇上需要合並的字段,而且是剛第一次產生,需要為合並列添加rowspan屬性,並賦值。
#4代碼塊,是相同的合並列,不必再動態產生了。
程序運行之后的效果:
