/// <summary> /// GridView合併行, /// </summary> /// <param name="gv">GridView</param> /// <param name="startCol">開始列</param> /// <param name="endCol">結束列</param> public static 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) { MergeRow(gv, i, item.StartRowIndex, item.EndRowIndex); } } else //合併開始列的行 { MergeRow(gv, i, init.StartRowIndex, init.EndRowIndex); } } }
/// <summary> /// Traverse previous Column /// </summary> /// <param name="gv">GridView</param> /// <param name="prevCol">The previous column of current column</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); } }
/// <summary> /// 合并GridView单元格 /// </summary> /// <param name="gv">要合并的GridView</param> /// <param name="cols">制定的列</param> public static void MergeRow(GridView gv, params int[] cols) { if (cols.Any(t => t < 0)) { throw new ArgumentOutOfRangeException("参数中不能包含小于0列"); } var init = new RowArg() { StartRowIndex = 0, EndRowIndex = gv.Rows.Count - 2 }; for (int i = 0; i < cols.Length; i++) { if (i > 0) { var list = new List <RowArg>(); //从第二列开始就要遍历前一列 IteratePrevCol(gv, cols[i - 1], list); foreach (var item in list) { MergeRow(gv, cols[i], item.StartRowIndex, item.EndRowIndex); } } //合并开始列的行 else { MergeRow(gv, i, init.StartRowIndex, init.EndRowIndex); } } }
/// <summary> /// 合并GridView单元格 /// </summary> /// <param name="gv">要合并的GridView</param> /// <param name="cols">指定的列,要按照顺序传入</param> public static void MergeRow(GridView gv, params int[] cols) { RowArg init = new RowArg() { StartRowIndex = 0, EndRowIndex = gv.Rows.Count - 2 }; for (int i = 0; i < cols.Length; i++) { if (i > 0) { List <RowArg> list = new List <RowArg>(); //从第二列开始就要遍历前一列 TraversesPrevCol(gv, cols[i - 1], list); foreach (var item in list) { MergeRow(gv, cols[i], item.StartRowIndex, item.EndRowIndex); } } //合并开始列的行 else { MergeRow(gv, i, init.StartRowIndex, init.EndRowIndex); } } }
/// <summary> /// GridView合并行 /// </summary> /// <param name="gv">GridView</param> /// <param name="startCol">开始列(索引从0开始)</param> /// <param name="endCol">结束列</param> public static void MergeRow(GridView gv, int startCol, int endCol) { if (startCol < 0) { throw new ArgumentOutOfRangeException("startCol", "开始列不能小于0"); } if (endCol < 0) { throw new ArgumentOutOfRangeException("endCol", "结束列不能小于0"); } if (startCol > endCol) { throw new ArgumentException("开始列不能小于结束列"); } var init = new RowArg() { StartRowIndex = 0, EndRowIndex = gv.Rows.Count - 2 }; for (int i = startCol; i < endCol + 1; i++) { if (i > 0) { var list = new List <RowArg>(); //从第二列开始就要遍历前一列 IteratePrevCol(gv, i - 1, list); foreach (var item in list) { MergeRow(gv, i, item.StartRowIndex, item.EndRowIndex); } } //合并开始列的行 else { MergeRow(gv, i, init.StartRowIndex, init.EndRowIndex); } } }