如何在GridView中合并行以实现指定表格结构的转换效果
GridView表格转换实现方案
方案1:先重组数据源再绑定(推荐)
该方案逻辑清晰,后续维护成本低:
- 第一步:按
TIME字段对原始数据分组,同组数据按顺序提取字段值构造新数据源,每组对应3行新数据:- 新第1行:
[TIME值, 组内第1条记录的DETAILS1, 组内第2条记录的DETAILS1, 组内第3条记录的DETAILS1] - 新第2行:
["", 组内第1条记录的DETAILS2, 组内第2条记录的DETAILS2, 组内第3条记录的DETAILS2] - 新第3行:
["", 组内第1条记录的DETAILS3, 组内第2条记录的DETAILS3, 组内第3条记录的DETAILS3]
存在多组不同TIME数据时,按顺序拼接所有分组的行即可。
- 新第1行:
- 第二步:实现TIME列的跨行合并,在GridView的
RowDataBound事件中添加如下逻辑(C#示例):
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { // 假设TIME列为第0列 var timeVal = DataBinder.Eval(e.Row.DataItem, "TIME")?.ToString(); if (!string.IsNullOrEmpty(timeVal)) { // 同TIME分组固定为3行时直接设置rowspan,行数不固定可提前统计分组大小动态赋值 e.Row.Cells[0].RowSpan = 3; } else { // 空TIME的行移除对应单元格,避免出现多余边框 e.Row.Cells.RemoveAt(0); } } }
方案2:直接操作已绑定的GridView行
如果不希望修改原始数据源,可在GridView完成原数据绑定后,直接遍历行修改内容:
- 遍历所有GridView数据行,按TIME值分组,记录每组的行索引范围
- 对每个分组的3行数据,按转换规则重新赋值每个单元格的内容:
- 分组第1行保留TIME值,DETAILS1/2/3列分别赋值为3条原记录的DETAILS1字段值
- 分组第2行TIME列清空,DETAILS1/2/3列分别赋值为3条原记录的DETAILS2字段值
- 分组第3行TIME列清空,DETAILS1/2/3列分别赋值为3条原记录的DETAILS3字段值
- 给分组第1行的TIME列设置
RowSpan = 3,完成单元格合并
内容的提问来源于stack exchange,提问作者user8077340
相关产品推荐
相关产品推荐

