• .Net用字符串拼接实现表格数据相同时合并单元格


    前言

        最近在做项目通过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         }

      

  • 相关阅读:
    如何:将控件锁定到 Windows 窗体
    Linux 设置字符集
    sql 批量处理
    解决表被锁了
    oracle 分页模板
    创建用户及表空间
    恢复数据库数据
    instr vs like 效率
    自定义参数转换器
    spring boot 整合MyBatis
  • 原文地址:https://www.cnblogs.com/dyhdream/p/4778611.html
Copyright © 2020-2023  润新知