GridView、Repeater合並單元格可以參考http://www.cnblogs.com/zhmore/archive/2009/04/22/1440979.html,但是原文例子是合並一列的單元格。
現在有2列需要分別合並單元格,如下所示,“類型”和“操作”當有相同的值時要分別合並:
可以在原來的代碼上稍做改動,前台代碼如下:
<asp:Repeater runat="server" ID="rptList"> <HeaderTemplate> <table width="100%" border="1" cellpadding="4" cellspacing="0" bgcolor="#464646" style="border-collapse:collapse; padding:0; margin:0"> <tr bgcolor="#eeeeee"> <td>序號</td> <td>類型</td> <td>操作</td> <td>編號</td> </tr> </HeaderTemplate> <ItemTemplate> <tr bgcolor="#ffffff"> <td><%# Eval("rn") %></td> <td runat="server" id="td1"><%#Eval("Col1")%></td> <td runat="server" id="td2"><%#Eval("Col2")%></td> <td><%#Eval("Col3")%></td> <td><%#Eval("Col4")%></td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater>
后台代碼如下:
private void BindData() { rptList.DataSource = null; //這里為數據源,省略... rptList.DataBind(); MergeCell("td1", "td2"); } private void MergeCell(string tdIdName1, string tdIdName2) { for (int i = rptList.Items.Count - 1; i > 0; i--) { MergeCellSet(tdIdName1, tdIdName2, i); } } private void MergeCellSet(string tdIdName1, string tdIdName2, int i) { HtmlTableCell cellPrev = rptList.Items[i - 1].FindControl(tdIdName1) as HtmlTableCell; HtmlTableCell cell = rptList.Items[i].FindControl(tdIdName1) as HtmlTableCell; cell.RowSpan = (cell.RowSpan == -1) ? 1 : cell.RowSpan; cellPrev.RowSpan = (cellPrev.RowSpan == -1) ? 1 : cellPrev.RowSpan; if (cell.InnerText == cellPrev.InnerText) { cell.Visible = false; cellPrev.RowSpan += cell.RowSpan; //關鍵代碼,再判斷執行第2列的合並單元格方法 if (tdIdName2 != "") MergeCellSet(tdIdName2, "", i); } }