在 GridView 顯示主從關聯資料(如同一學生多學期成績)時,常需合併相同值的儲存格以利閱讀。本篇擴充前兩篇的 RowSpan 方法,支援多欄位同時合併與鏈式呼叫。
var data = new[] {
new { 姓名 = "張三", 性別 = "男", 國文 = 86f, 數學 = 90f, 學期 = "第一學期" },
new { 姓名 = "張三", 性別 = "男", 國文 = 89f, 數學 = 98f, 學期 = "第二學期" },
new { 姓名 = "李四", 性別 = "男", 國文 = 89f, 數學 = 64f, 學期 = "第一學期" },
new { 姓名 = "李四", 性別 = "男", 國文 = 75f, 數學 = 64f, 學期 = "第二學期" },
new { 姓名 = "王五", 性別 = "男", 國文 = 89f, 數學 = 64f, 學期 = "第一學期" },
new { 姓名 = "王五", 性別 = "男", 國文 = 63f, 數學 = 93f, 學期 = "第二學期" }
};
GridView1.DataSource = data;
GridView1.DataBind();
// 合併第 0 欄(姓名),並同步合併第 1 欄(性別)
// 再合併第 2 欄(國文)、第 3 欄(數學)
GridView1.RowSpan(new { ColumnIndex = 0, Columns = "1" })
.RowSpan(new { ColumnIndex = 2 })
.RowSpan(new { ColumnIndex = 3 });
ColumnIndex:指定基準欄位索引(從 0 起)。Columns:以逗號分隔的字串,指定需同步合併的其他欄位索引。RowSpan 並隱藏後續列對應儲存格。ID(控制項 ID)與 PropertyName(取值屬性,預設 Text)。目前實作使用反射解析匿名型別參數,若在大量資料或頻繁繫結場景下,可改用 Expression Tree 動態建構 Lambda 快取委派,避免重複反射開銷。