/// <summary> /// GridView合并行, /// </summary> /// <param name="gv">GridView</param> /// <param name="startCol">开始列</param> /// <param name="endCol">结束列</param> public void MergeRow(GridView gv, int startCol, int endCol) { RowArg init = new RowArg() { StartRowIndex = 0, EndRowIndex = gv.Rows.Count - 2 }; for (int i = startCol; i < endCol + 1; i++) { if (i > 0) { List<RowArg> list = new List<RowArg>(); //从第二列开始就要遍历前一列 TraversesPrevCol(gv, i - 1, list); foreach (var item in list) { MergeRowCol(gv, i, item.StartRowIndex, item.EndRowIndex); } } //合并开始列的行 else { MergeRowCol(gv, i, init.StartRowIndex, init.EndRowIndex); } } }
/// <summary> /// 遍历前一列 /// </summary> /// <param name="gv">GridView</param> /// <param name="prevCol">当前列的前一列</param> /// <param name="list"></param> private static void TraversesPrevCol(GridView gv, int prevCol, List<RowArg> list) { if (list == null) { list = new List<RowArg>(); } RowArg ra = null; for (int i = 0; i < gv.Rows.Count; i++) { if (!gv.Rows[i].Cells[prevCol].Visible) { continue; } ra = new RowArg(); ra.StartRowIndex = gv.Rows[i].RowIndex; ra.EndRowIndex = ra.StartRowIndex + gv.Rows[i].Cells[prevCol].RowSpan - 2; list.Add(ra); } }