ASP.NET中GridView和Repeater重复数据怎么合并-创新互联

小编给大家分享一下ASP.NET中GridView和Repeater重复数据怎么合并,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册雅安服务器托管、营销软件、网站建设、都江堰网站维护、网站推广。

这几天做一个项目有用到表格显示数据的地方,客户要求重复的数据列需要合并,就总结了一下GridView 和 Repeater 关于重复数据合并的方法。

ASP.NET中GridView和Repeater重复数据怎么合并

效果图如下 :

ASP.NET中GridView和Repeater重复数据怎么合并

GridView :
前台代码 :


                         '>                             '>                             '>                              '>                    
 

GridView 后台代码


public void DataBind()
  {
   string sql = "select a.aname,b.bname,c.cname ,d.dname from aa as a right join bb as b on a.aid=b.aid right join cc as c on b.bid=c.bid left join dd as d on d.cid=c.cid order by a.aid";
   SqlDataAdapter sda = new SqlDataAdapter(sql, cn);
   DataSet ds = new DataSet();
   sda.Fill(ds);
   gvIncome.DataSource = ds;
   gvIncome.DataBind();
   //MergeRows(gvIncome.HeaderRow, gvIncome.Rows.Count);
   int colnum = gvIncome.Columns.Count; // 获取GridView中获取列数
   MergeRows(gvIncome, 4, "Label"); // GridView 要整合的列数 需要改变的Lable控件
  }
  public static void MergeRows(GridView gvw, int colnum, string controlNameo)
  {
   for (int col = 0; col < colnum; col++)  // 遍历每一列
   {
    string controlName = controlNameo + col.ToString(); // 获取当前列需要改变的Lable控件ID
    for (int rowIndex = gvw.Rows.Count - 2; rowIndex >= 0; rowIndex--)  //GridView中获取行数 并遍历每一行
    {
     GridViewRow row = gvw.Rows[rowIndex];  // 获取当前行
     GridViewRow previousRow = gvw.Rows[rowIndex + 1]; // 获取当前行 的上一行
     Label row_lbl = row.Cells[col].FindControl(controlName) as Label; //// 获取当前列当前行 的 Lable 控件ID 的文本
     Label previousRow_lbl = previousRow.Cells[col].FindControl(controlName) as Label; //// 获取当前列当前行 的上一行 的 Lable控件ID 的文本
     if (row_lbl != null && previousRow_lbl != null) // 如果当前行 和 上一行 要改动的 Lable 的ID 的文本不为空
     {
      if (row_lbl.Text == previousRow_lbl.Text)  // 如果当前行 和 上一行 要改动的 Lable 的ID 的文本不为空 且相同
      {
       // 当前行的当前单元格(单元格跨越的行数。 默认值为 0 ) 与下一行的当前单元格的跨越行数相等且小于一 则 返回2 否则让上一行行的当前单元格的跨越行数+1
       row.Cells[col].RowSpan = previousRow.Cells[col].RowSpan < 1 ? 2 : previousRow.Cells[col].RowSpan + 1;
       //并让上一行的当前单元格不显示
       previousRow.Cells[col].Visible = false;
      }
     }
    }
   }
   
  }

Repeater前台代码 :


// table样式


//*****************

                                        <%#Eval("aname") %>       <%#Eval("bname") %>       <%#Eval("cname") %>       <%#Eval("dname") %>                  
一级二级三级四级

Repeater后台代码:


public void DataBind()
  {
   string sql = "select a.aname,b.bname,c.cname ,d.dname from aa as a right join bb as b on a.aid=b.aid right join cc as c on b.bid=c.bid left join dd as d on d.cid=c.cid order by a.aid";
   SqlDataAdapter sda = new SqlDataAdapter(sql, cn);
   DataSet ds = new DataSet();
   sda.Fill(ds);
   rptIncome.DataSource = ds;
   rptIncome.DataBind();

   for (int i = 0; i < 4; i++) // 遍历每一列
   {
    string rpttd = "td";
    string tdIdName1 = rpttd + i.ToString();
    MergeCell(tdIdName1); // 把当前列的 td 的 ID文本作为方法的参数
   }
   
  }

  /// 
  /// 
  /// 
  /// 当前列当前行的 td 的ID文本
  private void MergeCell(string tdIdName1)
  {
   for (int i = rptIncome.Items.Count - 1; i > 0; i--) // rptIncome.Items.Count - 1 数据总行数(数据从0开始)  遍历当前列的每一行
   {
    MergeCellSet(tdIdName1, i);  
   }  
  }
  /// 
  /// 
  /// 
  /// 当前列当前行的 td 的ID文本
  /// 当前行
  private void MergeCellSet(string tdIdName1, int i)
  {
   HtmlTableCell cellPrev = rptIncome.Items[i - 1].FindControl(tdIdName1) as HtmlTableCell; // 获取下一行当前列的 td 所在的单元格
   HtmlTableCell cell = rptIncome.Items[i].FindControl(tdIdName1) as HtmlTableCell; // 获取当前行当前列的 td 所在的单元格
   cell.RowSpan = (cell.RowSpan == -1) ? 1 : cell.RowSpan; // 获取当前行当前列单元格跨越的行数 
   cellPrev.RowSpan = (cellPrev.RowSpan == -1) ? 1 : cellPrev.RowSpan; // 获取下一行当前列单元格跨越的行数 
   if (cell.InnerText == cellPrev.InnerText)
   {
    // 让下一行的当前单元格的跨越行数 + 当前行的跨越行数
    cellPrev.RowSpan += cell.RowSpan;
    cell.Visible = false;  // 隐藏当前行

    //关键代码,再判断执行第2列的合并单元格方法
   }
  }

以上是“ASP.NET中GridView和Repeater重复数据怎么合并”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


本文标题:ASP.NET中GridView和Repeater重复数据怎么合并-创新互联
本文链接:http://scyanting.com/article/csesgp.html