GridView控件显示Footer
网上找了个合并一列相同信息的事件GridView1_DataBound等。发现Footer也被合并进去了。protected void GridView1_DataBound(object sender, EventArgs e)
    {
        int row = 0;   
        for (int i = 1; i < GridView1.Rows.Count; i++)   
        {   
            if (GridView1.Rows[i].Cells[0].Text == GridView1.Rows[i - 1].Cells[0].Text)               {   
  
                if (GridView1.Rows[row].Cells[1].RowSpan == 0)   
                {   
                    GridView1.Rows[row].Cells[0].RowSpan++;   
                }   
  
                GridView1.Rows[row].Cells[0].RowSpan++;   
                GridView1.Rows[i].Cells[0].Visible = false;   
            }   
            else  
            {   
                row = i;   
            }
            
        }   现在我需要分别合并第一列和第二列中相同信息的行,第一列都是一样的信息合并成一大块,第二列是三三二二的合并在一起的。求教下如何解决,自己测试了下发现有了FOOTER后,合并下有点凌乱的。

解决方案 »

  1.   


    这个是用vs2003的时候写的,现在第三方控件里就有属性合并同样的行了,gridview就没写对应的,你可以把下面的DataGrid1.Items都换成Gridview.Rows用,
    private void SpanGrid() 
    {
      int j=DataGrid1.Items.Count;//行数
      int u;//自循环所用参数
      for (int i = 0;i<j;i++)
      {
     int inRowSpan = 1;//跨行数
     string ItmStr = DataGrid1.Items[i].Cells[0].Text.ToString();
     for(u = i+1;u<j;u++)
     {
      if (ItmStr.Equals(DataGrid1.Items[u].Cells[0].Text.ToString()))
      {
       inRowSpan += 1;
       DataGrid1.Items[i].Cells[0].RowSpan = inRowSpan;//对最歪层所循环行赋要跨行数
       DataGrid1.Items[u].Cells[0].Visible = false;//当前被跨行不可见
      }
      else
      {
       break;
      }
     }
     i = u - 1;
      }
    } 看有帮助没有
      

  2.   


    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:GridView ID="gv" runat="server" onprerender="gv_PreRender"></asp:GridView>
        </form>
    </body>
    </html>int mergeCount = 2; //前两列合并        private DataTable GetDataTable()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("ID", typeof(Int32)));
            dt.Columns.Add(new DataColumn("Name", typeof(String)));
            dt.Columns.Add(new DataColumn("Sex", typeof(String)));
            DataRow dr = dt.NewRow();
            dr[0] = 1;
            dr[1] = "0101";
            dr[2] = "男";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 1;
            dr[1] = "0101";
            dr[2] = "男";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 1;
            dr[1] = "01011";
            dr[2] = "女";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 2;
            dr[1] = "01";
            dr[2] = "男";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 2;
            dr[1] = "01001";
            dr[2] = "女";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 3;
            dr[1] = "01001";
            dr[2] = "女";
            dt.Rows.Add(dr);
            return dt;
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                gv.DataSource = GetDataTable();
                gv.DataBind();
            }
        }    protected void gv_PreRender(object sender, EventArgs e)
        {
            for (int rowIndex = gv.Rows.Count - 2; rowIndex >= 0; rowIndex--)
            {
                GridViewRow row = gv.Rows[rowIndex];
                GridViewRow previousRow = gv.Rows[rowIndex + 1];            for (int i = 0; i < row.Cells.Count && i < mergeCount; i++)
                {
                    if (row.Cells[i].Text == previousRow.Cells[i].Text)
                    {
                        row.Cells[i].RowSpan = previousRow.Cells[i].RowSpan < 2 ? 2 :
                                               previousRow.Cells[i].RowSpan + 1;
                        previousRow.Cells[i].Visible = false;
                    }
                }
            }    }
      

  3.   

            int row = 0;   
            for (int i = 1; i < GridView1.Rows.Count; i++)   
            {   
                if (GridView1.Rows[i].Cells[0].Text == GridView1.Rows[i - 1].Cells[0].Text)               {   
      
                        GridView1.Rows[row].Cells[0].RowSpan++;     
       
                    GridView1.Rows[i].Cells[0].Visible = false;   
                }   
                else  
                {   
                    GridView1.Rows[row].Cells[0].RowSpan++; 
                    row = i;   
                }
                
            } 
    GridView1.Rows[row].Cells[0].RowSpan++; 
    这样可以吗?
      

  4.   

    如果,给gridview用了皮肤,有些行就分不清楚,粘在一起
      

  5.   

    非常感谢 阿非大哥。
    能不能在牛逼点。我另开帖子给分!不想在这个帖子加分了。能不能以第一列为首要,第1列的合并为第2列合并的基础。如图cc这个值,既属于A又属于B且相邻在一起,两个值需要以第一列为标准进行区分。
      

  6.   

    已经又开个帖子了。地址:收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 关于Gridview控件合并某2列相同信息的问题(续)[
    就是第2列里面有个cc这个值,需要根据第一列的进行区分,而不是合并再一起!