前段時間,Insus.NET一直在演示GridView控件Header頭行或列:《動態變更GridView控件列名》和《動態合並或定制GridView控件Header頭某些列》,現今想演示合並Gridview的DataRow中的列。
其實合並列也不是什么復雜的問題,只想明白其中的原理,就覺得簡單至極。
數據庫方面的准備,在此例中略過。
在站點創建一個網頁,拉GridView控件到.aspx網頁中,並用自定義模版顯示數據。如下:
去.aspx.cs的code behind寫數據綁定代碼:
網頁在瀏覽時,會看到下面的效果:
看到否,上圖中第二列,有很KindName的相同的,為了界面簡潔與清晰,Insus.NET決定合並它們。為了實現數據行中的列合並,我們需要為GridView控件寫一個事件 OnRowCreated="GridViewFruit_RowCreated":
現在,我們可以去code behind寫程序了,在寫OnRowCreated事件程序之前,先需要定義一個頁面級的變量:
上圖中的變量,rowCount將記錄所有記錄總數,初始值為0。rowindex是將用來記錄行索引,初始值為0, 而mergeCellText變量是合並的字段名。
OK,下面我們開始寫OnRowCreated事件邏輯程序:
上圖中:
#35行代碼,如果不是數據行,將跳過下面的程序。
#37行,把e.Row.DataItem轉為DataRowView。
#39-#43行代碼,如果是DataRow第一行,將行索引和將要合並的列值記錄下來。
#45 -#62行代碼,均是處理非第一數據行。
#47行代碼,如果當前行需要合並的數據列值與前一行不相同的,我們就可以合並前面的數據列了。還要把當前的行索引與列值記錄下來。
#55行把相同的列拿掉。
#57行代碼是判斷是否為最后一行。
#59行代碼,做最后一次合並列。
運行的結果如下:
如果你明白上面的邏輯處理方法,做其它列合並,是輕而易舉的事情。