GridView合并单元格的简单方法

 

代码
   
     
string _tempvalue = "" ;
2 int _temprowspan = 1 ;
3 TableCell _temptablecell = null ;
4
5 protected void GridView1_RowDataBound( object sender, GridViewRowEventArgs e)
6 {
7
8 if (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType == DataControlRowType.Footer)
9 {
10 if (e.Row.Cells[ 0 ].Text == _tempvalue)
11 {
12 _temprowspan ++ ;
13 e.Row.Cells.Remove(e.Row.Cells[ 0 ]);
14 }
15 else
16 {
17 if (_temprowspan != 1 )
18 _temptablecell.RowSpan = _temprowspan;
19
20 _tempvalue = e.Row.Cells[ 0 ].Text;
21 _temptablecell = e.Row.Cells[ 0 ];
22 _temprowspan = 1 ;
23 }
24 }
25 }

 

//   <summary>   

    ///   合并GridView列中相同的行   

    ///   </summary>   

    ///   <param   name="GridView1">GridView对象</param>   

    ///   <param   name="cellNum">需要合并的列</param>   

    public static void GroupRows(GridView GridView1, int cellNum)

    {

        int i = 0, rowSpanNum = 1;

        while (i < GridView1.Rows.Count - 1)

        {

            GridViewRow gvr = GridView1.Rows[i];

            for (++i; i < GridView1.Rows.Count; i++)

            {

                GridViewRow gvrNext = GridView1.Rows[i];

                if (gvr.Cells[cellNum].Text == gvrNext.Cells[cellNum].Text)

                {

                    gvrNext.Cells[cellNum].Visible = false;

                    rowSpanNum++;

                }

                else

                {

                    gvr.Cells[cellNum].RowSpan = rowSpanNum;

                    rowSpanNum = 1;

                    break;

                } 



                if (i == GridView1.Rows.Count - 1)

                {

                    gvr.Cells[cellNum].RowSpan = rowSpanNum;

                }

            }

        }

    } 



    ///   <summary>   

    ///   根据条件列合并GridView列中相同的行   

    ///   </summary>   

    ///   <param   name="GridView1">GridView对象</param>   

    ///   <param   name="cellNum">需要合并的列</param>

    ///   ///   <param   name="cellNum2">条件列(根据某条件列还合并)</param>

    public static void GroupRows(GridView GridView1, int cellNum, int cellNum2)

    {

        int i = 0, rowSpanNum = 1;

        while (i < GridView1.Rows.Count - 1)

        {

            GridViewRow gvr = GridView1.Rows[i];

            for (++i; i < GridView1.Rows.Count; i++)

            {

                GridViewRow gvrNext = GridView1.Rows[i];

                if (gvr.Cells[cellNum].Text + gvr.Cells[cellNum2].Text == gvrNext.Cells[cellNum].Text + gvrNext.Cells[cellNum2].Text)

                {

                    gvrNext.Cells[cellNum].Visible = false;

                    rowSpanNum++;

                }

                else

                {

                    gvr.Cells[cellNum].RowSpan = rowSpanNum;

                    rowSpanNum = 1;

                    break;

                } 



                if (i == GridView1.Rows.Count - 1)

                {

                    gvr.Cells[cellNum].RowSpan = rowSpanNum;

                }

            }

        }

    } 



  



第二个方法只是在第一个方法的修改了一点点, 在判断单元格的时候,加上了一个条件列:



if (gvr.Cells[cellNum].Text + gvr.Cells[cellNum2].Text == gvrNext.Cells[cellNum].Text + gvrNext.Cells[cellNum2].Text)。当然,第二个方法还可以扩展,根据多个列的条件来合并。 



 

你可能感兴趣的:(GridView)