前言
最近在做项目通过GridView或Repeater绑定数据,如果两行或若干行某列值相同,需要进行合并单元格,但是实现过程中想到了字符串拼接,于是就没用绑定数据控件,而是用了html结合字符串实现了绑定数据源并满足以上要求合并单元格。
前台代码如下
1 <html xmlns="http://www.w3.org/1999/xhtml"> 2 <head runat="server"> 3 <title></title> 4 </head> 5 <body> 6 <form id="form1" runat="server"> 7 <div> 8 <%--<asp:Repeater ID="Repeater1" runat="server"> 9 <HeaderTemplate> 10 <table border="1"> 11 <tr> 12 <td> 13 序号 14 </td> 15 <td> 16 内容1 17 </td> 18 <td> 19 内容2 20 </td> 21 </tr> 22 </HeaderTemplate> 23 <ItemTemplate> 24 </ItemTemplate> 25 <FooterTemplate> 26 </table></FooterTemplate> 27 </asp:Repeater>--%> 28 <table border="1"> 29 <tr> 30 <td> 31 序号 32 </td> 33 <td> 34 内容1 35 </td> 36 <td> 37 内容2 38 </td> 39 </tr> 40 <%=strTRs %> 41 </table> 42 </div> 43 </form> 44 </body> 45 </html>
后台代码
1 public string strTRs = ""; 2 protected void Page_Load(object sender, EventArgs e) 3 { 4 //拼接表格 5 //这里将要合并的数据 列 id1 进行排序,相同 列id1 数据行集中便于循环处理 6 DataTable dt = DbHelperSQL.GetDataTable("select * from Table_2 order by id1"); 7 for (int i = 0; i < dt.Rows.Count; ) 8 { 9 int j = 1; //记录每次 while循环累加合并的行数 10 //循环判断下一行记录的 id1列值是否相等,相等继续循环,不相等跳出 11 while (true) 12 { 13 if (i >= dt.Rows.Count) break; 14 if (dt.Rows.Count > i + 1) //如果存在下一行记录,进入if 15 { 16 //如果下一行记录和当前行记录 id1列值相等,继续循环 17 if (dt.Rows[i]["id1"].ToString().Equals(dt.Rows[i + 1]["id1"].ToString())) 18 { 19 i++; 20 j++; 21 continue; 22 } 23 else 24 { 25 //j大于1时存在要合并的行,合并处理 26 if (j > 1) 27 { 28 for (int k = 0; k < j; k++) 29 { 30 if (k == 0) 31 { 32 strTRs += string.Format("<tr><td rowspan='{0}'>{1}</td><td>{2}</td><td>{3}</td></tr>", j, dt.Rows[i - j + k + 1]["id1"].ToString(), dt.Rows[i - j + k + 1]["test"].ToString(), dt.Rows[i - j + k + 1]["id"].ToString()); 33 } 34 else 35 { 36 strTRs += string.Format("<tr><td>{2}</td><td>{3}</td></tr>", j, dt.Rows[i - j + k + 1]["id1"].ToString(), dt.Rows[i - j + k + 1]["test"].ToString(), dt.Rows[i - j + k + 1]["id"].ToString()); 37 } 38 } 39 j = 1; 40 i++; 41 } 42 else 43 { 44 strTRs += string.Format("<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>", dt.Rows[i]["id1"].ToString(), dt.Rows[i]["test"].ToString(), dt.Rows[i]["id"].ToString()); 45 i++; 46 break; 47 } 48 } 49 } 50 else //不存在下一行记录,文本添加 51 { 52 strTRs += string.Format("<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>", dt.Rows[i]["id1"].ToString(), dt.Rows[i]["test"].ToString(), dt.Rows[i]["id"].ToString()); 53 i++; 54 break; 55 } 56 57 } 58 } 59 60 }