GitHub項目地址:https://github.com/mingceng/merge-gridviewcell
上周寫了一篇GridView多行多列合並單元格(完整代碼和例子),實現的方法有很多不足之處,比如只能合並連續的列,不支持模板列。在今天的文章里,首先來解決第一個不足。
解決這個問題的思路並不難,現有的代碼已經解決了連續列的合並,合並指定的列只需將要合並的列按照順序傳遞給合並的方法,就OK了!下面我給出合並指定列的代碼:
1: /// <summary>
2: /// 合並GridView單元格
3: /// </summary>
4: /// <param name="gv">要合並的GridView</param>
5: /// <param name="cols">指定的列,要按照順序傳入</param>
6: public static void MergeRow(GridView gv, params int[] cols)
7: {
8: RowArg init = new RowArg()
9: {
10: StartRowIndex = 0,
11: EndRowIndex = gv.Rows.Count - 2
12: };
13: for (int i = 0; i < cols.Length; i++)
14: {
15: if (i > 0)
16: {
17: List<RowArg> list = new List<RowArg>();
18: //從第二列開始就要遍歷前一列
19: TraversesPrevCol(gv, cols[i - 1], list);
20: foreach (var item in list)
21: {
22: MergeRow(gv, cols[i], item.StartRowIndex, item.EndRowIndex);
23: }
24: }
25: //合並開始列的行
26: else
27: {
28: MergeRow(gv, i, init.StartRowIndex, init.EndRowIndex);
29: }
30: }
31: }
上一篇文章最后,我寫了一個簡單的例子,在這個例子中,如下圖(左邊)所示,合並了前四列,第一列是張三,第二列是張三的工資項:應發工資和五險一金,第三列分別是應發工資的子項:基本工資、獎金和加班,五險一金的子項:醫療保險和住房公積金。第四列基本工資:1月,獎金:1月,加班:1月… 正常來說,第四列都是1月的,應該都合並成一塊。使用連續列合並的方法完成這個問題,可以將列的順序進行調整,但是現在要求不能調整列的順序,那么就只能按照指定列合並了。
完成上圖中間的合並格式,只需在GridView綁定了數據之后,調用本文開始的方法,傳入列的順序0,1,3,2,完成右邊圖的合並格式,只需傳入列的順序0,3,1,2。
1: //左邊圖
2: MergeGridViewCell.MergeRow(Gridview1, 0, 3);
3: //中間圖
4: MergeGridViewCell.MergeRow(Gridview1, 0, 1, 3, 2);
5: //右邊圖
6: MergeGridViewCell.MergeRow(Gridview1, 0, 3, 1, 2);
最后說明一下,本篇文章是在上一篇文章的基礎上完成的,如果對此感興趣的,可以先閱讀上一篇文章。