• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

ASP.NET中GridView和Repeater重复数据如何合并

asp 搞代码 4年前 (2022-01-03) 38次浏览 已收录 0个评论

这篇文章主要介绍了ASP.NET中GridView和Repeater重复数据合并的方法,感兴趣的小伙伴们可以参考一下

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

效果图如下 :

GridView :
前台代码 :

 <div>     '>  '>  '>  '></div>

代码如下:

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 = 0; rowIndex--)  //GridView中获取行数 并遍历每一行 { GridViewRow row = gvw.Rows[rowIndex];  // 获取当前行 GridViewRow previousRow = gvw.Rows[rowIndex + 1]; // 获取当前行 的上一行 Label row_lbl = row<div style="color:transparent">来源gaodai.ma#com搞##代!^码网</div>.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 </div><p>Repeater前台代码 :<br /></p><div class="gaodaimacode"><pre class="prettyprint linenums"> // table样式  table { border-collapse:collapse; } table tr td,th { border:1px solid black; }  //***************** <div> <table> <tr> <th>一级</th><th>二级</th><th>三级</th><th>四级</th></tr>  <tr> <td id="td0"></td><td id="td1"></td><td id="td2"></td><td id="td3"></td></tr></table></div>

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文本作为方法的参数 } } /// <summary> /// /// </summary> /// 当前列当前行的 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); } } /// <summary> /// /// </summary> /// 当前列当前行的 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重复数据如何合并的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:ASP.NET中GridView和Repeater重复数据如何合并
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址