GridView合并单元格

来源:互联网 发布:matlab给数据加噪声 编辑:程序博客网 时间:2024/06/05 03:15

GridView合并单元格,引合并单元格,实际上是合并数据结构.然后把处理后的数据绑定到GridView控件中.

关键代码:

/// <summary>    /// 合并GridView单元格    /// </summary>    public class MergeGridViewCell    {        /// <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>        /// 合并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>        /// 遍历前一列        /// </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);            }        }        /// <summary>        /// 合并单列的行        /// </summary>        /// <param name="gv">GridView</param>        /// <param name="currentCol">当前列</param>        /// <param name="startRow">开始合并的行索引</param>        /// <param name="endRow">结束合并的行索引</param>        private static void MergeRow(GridView gv, int currentCol, int startRow, int endRow)        {            for (int rowIndex = endRow; rowIndex >= startRow; rowIndex--)            {                GridViewRow currentRow = gv.Rows[rowIndex];                GridViewRow prevRow = gv.Rows[rowIndex + 1];                if (currentRow.Cells[currentCol].Text != "" && currentRow.Cells[currentCol].Text != " ")                {                    if (currentRow.Cells[currentCol].Text == prevRow.Cells[currentCol].Text)                    {                        currentRow.Cells[currentCol].RowSpan = prevRow.Cells[currentCol].RowSpan < 1 ? 2 : prevRow.Cells[currentCol].RowSpan + 1;                        prevRow.Cells[currentCol].Visible = false;                    }                }            }        }        class RowArg        {            public int StartRowIndex { get; set; }            public int EndRowIndex { get; set; }        }    }


运行效果图:

 

演示案例下载地址:http://download.csdn.net/detail/lovegonghui/9266073

0 0
原创粉丝点击