[C#]合并单元格,行、列

説明:控件ID指的是页面上面的GridView控件的ID名称或者是DataGrid控件的ID名称;

控件类型写GridView或者DataGrid(根据页面控件属于那种就写那种)。

如有疑问请留言。。。。。。。

        /// <summary>
        /// 合并单元格(合并某一行的所有列)
        /// </summary>
        /// <param name="id">控件的ID</param>
        /// <param name="type">控件类型对象(如写GridView,DataGrid)</param>
        /// <param name="rows">需要合并的行</param>
        public static void GroupRow(string id,string type, int rows)
        {
            Control contr = new Control();
            TableCell oldTc = null;
            switch(type)
            {
                case "GridView":
                    GridView GridView1 = (GridView)contr.FindControl(id);
                    oldTc = GridView1.Rows[rows].Cells[0];
                    for (int i = 1; i < GridView1.Rows[rows].Cells.Count; i++)
                    {
                        TableCell tc = GridView1.Rows[rows].Cells[i];  //Cells[0]就是你要合并的列  
                        if (oldTc.Text == tc.Text)
                        {
                            tc.Visible = false;
                            if (oldTc.ColumnSpan == 0)
                            {
                                oldTc.ColumnSpan = 1;
                            }
                            oldTc.ColumnSpan++;
                            oldTc.VerticalAlign = VerticalAlign.Middle;
                        }
                        else
                        {
                            oldTc = tc;
                        }
                    }
                    break;
                case "DataGrid":
                    DataGrid DataGrid1 = (DataGrid)contr.FindControl(id);
                    oldTc = DataGrid1.Items[rows].Cells[0];
                    for (int i = 1; i < DataGrid1.Items[rows].Cells.Count; i++)
                    {
                        TableCell tc = DataGrid1.Items[rows].Cells[i];  //Cells[0]就是你要合并的列  
                        if (oldTc.Text == tc.Text)
                        {
                            tc.Visible = false;
                            if (oldTc.ColumnSpan == 0)
                            {
                                oldTc.ColumnSpan = 1;
                            }
                            oldTc.ColumnSpan++;
                            oldTc.VerticalAlign = VerticalAlign.Middle;
                        }
                        else
                        {
                            oldTc = tc;
                        }
                    }
                    break;
            }
        }

        /// <summary>
        /// 合并单元格(合并一行中的几列)
        /// </summary>
        /// <param name="id">控件ID</param>
        /// <param name="type">控件类型对象(如写GridView,DataGrid)</param>
        /// <param name="rows">行</param>
        /// <param name="sCol">开始列</param>
        /// <param name="eCol">结束列</param>
        public static void GroupRow(string id, string type, int rows, int sCol, int eCol)
        {
            Control contr = new Control();
            TableCell oldTc = null;
            switch (type)
            {
                case "GridView":
                    GridView GridView1 = (GridView)contr.FindControl(id);
                    oldTc = GridView1.Rows[rows].Cells[sCol];
                    for (int i = 1; i < eCol - sCol; i++)
                    {
                        TableCell tc = GridView1.Rows[rows].Cells[i + sCol];  //Cells[0]就是你要合并的列  
                        tc.Visible = false;
                        if (oldTc.ColumnSpan == 0)
                        {
                            oldTc.ColumnSpan = 1;
                        }
                        oldTc.ColumnSpan++;
                        oldTc.VerticalAlign = VerticalAlign.Middle;
                    }
                    break;
                case "DataGrid":
                    DataGrid DataGrid1 = (DataGrid)contr.FindControl(id);
                    oldTc = DataGrid1.Items[rows].Cells[sCol];
                    for (int i = 1; i < eCol - sCol; i++)
                    {
                        TableCell tc = DataGrid1.Items[rows].Cells[i + sCol];  //Cells[0]就是你要合并的列  
                        tc.Visible = false;
                        if (oldTc.ColumnSpan == 0)
                        {
                            oldTc.ColumnSpan = 1;
                        }
                        oldTc.ColumnSpan++;
                        oldTc.VerticalAlign = VerticalAlign.Middle;
                    }
                    break;
            }
        }

        /// <summary>
        /// 合并单元格(合并某一列所有行)
        /// </summary>
        /// <param name="id">控件ID</param>
        /// <param name="type">控件类型对象(如写GridView,DataGrid)</param>
        /// <param name="cols">需要合并的列</param>
        public static void GroupCol(string id, string type, int cols)
        {
            Control contr = new Control();
            if (type == "GridView")
            {
                GridView GridView1 = (GridView)contr.FindControl(id);

                if (GridView1.Rows.Count < 1 || cols > GridView1.Rows[0].Cells.Count - 1)
                {
                    return;
                }
                TableCell oldTc = GridView1.Rows[0].Cells[cols];
                for (int i = 1; i < GridView1.Rows.Count; i++)
                {
                    TableCell tc = GridView1.Rows[i].Cells[cols];
                    if (oldTc.Text == tc.Text)
                    {
                        tc.Visible = false;
                        if (oldTc.RowSpan == 0)
                        {
                            oldTc.RowSpan = 1;
                        }
                        oldTc.RowSpan++;
                        oldTc.VerticalAlign = VerticalAlign.Middle;
                    }
                    else
                    {
                        oldTc = tc;
                    }
                }
            }
            else
            {
                DataGrid DataGrid1 = (DataGrid)contr.FindControl(id);

                if (DataGrid1.Items.Count < 1 || cols > DataGrid1.Items[0].Cells.Count - 1)
                {
                    return;
                }
                TableCell oldTc = DataGrid1.Items[0].Cells[cols];
                for (int i = 1; i < DataGrid1.Items.Count; i++)
                {
                    TableCell tc = DataGrid1.Items[i].Cells[cols];
                    if (oldTc.Text == tc.Text)
                    {
                        tc.Visible = false;
                        if (oldTc.RowSpan == 0)
                        {
                            oldTc.RowSpan = 1;
                        }
                        oldTc.RowSpan++;
                        oldTc.VerticalAlign = VerticalAlign.Middle;
                    }
                    else
                    {
                        oldTc = tc;
                    }
                }
            }
        }

        /// <summary>
        /// 合并单元格(合并某一列中的某些行)
        /// </summary>
        /// <param name="id">控件ID</param>
        /// <param name="type">控件类型对象(如写GridView,DataGrid)</param>
        /// <param name="cols">列</param>
        /// <param name="sRow">开始行</param>
        /// <param name="eRow">结束列</param>
        public static void GroupCol(string id, string type, int cols, int sRow, int eRow)
        {
            Control contr = new Control();
            TableCell oldTc = null;
            switch(type)
            {
                case "GridView":
                    GridView GridView1 = (GridView)contr.FindControl(id);
                    if (GridView1.Rows.Count < 1 || cols > GridView1.Columns.Count - 1)
                    {
                        return;
                    }
                    oldTc = GridView1.Rows[sRow].Cells[cols];
                    for (int i = 1; i < eRow - sRow; i++)
                    {
                        TableCell tc = GridView1.Rows[sRow + i].Cells[cols];
                        tc.Visible = false;
                        if (oldTc.RowSpan == 0)
                        {
                            oldTc.RowSpan = 1;
                        }
                        oldTc.RowSpan++;
                        oldTc.VerticalAlign = VerticalAlign.Middle;
                    }
                    break;
                case "DataGrid":
                    DataGrid DataGrid1 = (DataGrid)contr.FindControl(id);
                    if (DataGrid1.Items.Count < 1 || cols > DataGrid1.Columns.Count - 1)
                    {
                        return;
                    }
                    oldTc = DataGrid1.Items[sRow].Cells[cols];
                    for (int i = 1; i < eRow - sRow; i++)
                    {
                        TableCell tc = DataGrid1.Items[sRow + i].Cells[cols];
                        tc.Visible = false;
                        if (oldTc.RowSpan == 0)
                        {
                            oldTc.RowSpan = 1;
                        }
                        oldTc.RowSpan++;
                        oldTc.VerticalAlign = VerticalAlign.Middle;
                    }
                    break;
                default:
                    break;
            }
        }