GitHub項目地址:https://github.com/mingceng/merge-gridviewcellhtml
去年的時候,我寫了兩篇文章: GridView多行多列合併單元格(完整代碼和例子)和 GridView多行多列合併單元格(指定列合併)。今天繼續再添加一些功能,首先看下圖:git
左邊是原始數據的顯示,右邊是應用合併列以後的效果。github
從圖中能夠看到,二級指標有兩列,有的行中兩列的內容同樣,有的則不同,若是實現如右圖所示,看起來效果會更好一些。下面就着手實現這個功能,個人實現原理很簡單,就是遍歷GridView的行和遍歷行中的單元格,若是單元格的前一列和當前列的內容相同就合併這兩列。下面是具體實現的代碼,上面有註釋,應該很容易理解。spa
1: /// <summary>
2: /// 和並列
3: /// </summary>
4: /// <param name="gv">要合併的GridView</param>
5: /// <param name="startCol">開始列的索引</param>
6: /// <param name="endCol">結束列的索引</param>
7: /// <param name="containHeader">是否合併表頭,默認不合並</param>
8: public static void MergeColumn(GridView gv, int startCol, int endCol, bool containHeader = false)
9: {
10: if (containHeader)
11: {
12: BLRowCells(gv.HeaderRow, startCol, endCol);
13: }
14: foreach (GridViewRow row in gv.Rows)
15: {
16: BLRowCells(row, startCol, endCol);
17: }
18: }
19:
20: /// <summary>
21: /// 遍歷GridViewRow中的單元格
22: /// </summary>
23: /// <param name="row">要遍歷的行</param>
24: /// <param name="start">開始索引</param>
25: /// <param name="end">結束索引</param>
26: private static void BLRowCells(GridViewRow row, int start, int end)
27: {
28: //從開始索引的下一列開始
29: for (int i = start + 1; i <= end; i++)
30: {
31: //當前單元格
32: TableCell currCell = row.Cells[i];
33: //前一個單元格
34: TableCell prevCell = row.Cells[i - 1];
35: if (!string.IsNullOrEmpty(currCell.Text) && !string.IsNullOrEmpty(prevCell.Text))
36: {
37: if (currCell.Text == prevCell.Text)
38: {
39: currCell.ColumnSpan = prevCell.ColumnSpan < 1 ? 2 : prevCell.ColumnSpan + 1;
40: prevCell.Visible = false;
41: }
42: }
43: }
44: }
本篇文章做爲前兩篇文章的續文,內容相對來講簡單一些,不過有須要合併GridView單元格的朋友,但願這三篇文章可以起到幫助做用!code
GitHub項目地址:https://github.com/mingceng/merge-gridviewcellhtm