【问题标题】:Repeater control with nested elements TR TD带有嵌套元素的中继器控制 TR TD
【发布时间】:2012-11-15 14:16:39
【问题描述】:

我想以如下格式显示我的数据:

<table>
  <tr>
     <td></td>
     <td></td>
     <td></td>
     ...
  </tr>
  <tr>
     <td></td>
     <td></td>
     <td></td>
     ...
  </tr>
   .
   .
   .
</table>

我对如何表示数据有点困惑。 我正在考虑为此结构使用中继器控件。但是它需要嵌套的中继器控件还是可以使用单个中继器控件来完成? 有人可以建议我正确的方法吗?

提前致谢。

更新 :: 在我的情况下,它们不是静态顺序,它们是完全动态的。在某些情况下可能有单人,但在某些情况下,我的数量是 10-20。我需要在那些中显示测试分数结构。例如:

<table>
  <tr>
    <td>10</td>
    <td>5</td>
    <td>30</td>
  </tr>
  <tr>
    <td>40</td>
    <td>34</td>
  </tr>
   .
   .
   .
<table>

同样明智。简单来说,当一个用户的分数记录完成后,我需要在新的新鲜中添加新记录。

【问题讨论】:

  • 需要更多信息。您的数据是如何在您的程序中检索/表示的?
  • 我终于在运行时使用动态表绑定数据了。

标签: c# asp.net repeater nested-loops


【解决方案1】:

为什么要使用中继器?它是相当过时的组件。请改用 ListView。它在配置和操作方面更加灵活。

请使用hereMerrimack建议的解决方案

<asp:ListView ID="myListView" runat="server" 
   DataSourceID="YOURDATASOURCE" GroupItemCount="3">

   <LayoutTemplate>
      <table>
         <tr>
            <td>
               <table border="0" cellpadding="5">
                  <asp:PlaceHolder runat="server" ID="groupPlaceHolder"></asp:PlaceHolder>
               </table>
            </td>
         </tr>
      </table>
   </LayoutTemplate>

   <GroupTemplate>
      <tr>
         <asp:PlaceHolder runat="server" ID="itemPlaceHolder"></asp:PlaceHolder>
      </tr>
   </GroupTemplate>

   <ItemTemplate>
      <td>
         <%# Eval("FullName") %>
      </td>
   </ItemTemplate>
</asp:ListView>

【讨论】:

    【解决方案2】:

    旧经典方式的一个解决方案是嵌套循环

    <table>
    <% for(int loop1 = 0; loop1 <= condition1 ; loop1++){
           System.Console.WriteLine("<tr>");
           for(int loop2 = 0; loop2 <= condition2 ; loop2++){
               System.Console.WriteLine("<td>");
               System.Console.WriteLine("Your Data");
               System.Console.WriteLine("</td>");
           }
           System.Console.WriteLine("</tr>");
       } %>
    </table>
    

    【讨论】:

      【解决方案3】:

      你可以做一个这样的中继器

      <asp:Repeater ID="rptMyRepeater" runat="server" >
           <HeaderTemplate>
                <table>
                  <th>
                     <td>
                        Header 1
                     </td>
                     <td>
                        Header 2
                     </td>
                   </th>
            </HeaderTemplate>
            <ItemTemplate>
                <tr>
                   <td>
                       <asp:HiddenField runat="server" ID="hfHolderId" Value='<%# DataBinder.Eval(Container.DataItem, "HolderId") %>' />
                       <asp:TextBox runat="server" ID="tbText1" Text='<%# DataBinder.Eval(Container.DataItem, "Text1") %>' />
                   </td>
                   <td>
                       <asp:TextBox runat="server" ID="tbText2" Text='<%# DataBinder.Eval(Container.DataItem, "Text2") %>' />
                   </td>
                 </tr>
             </ItemTemplate>
             <FooterTemplate>
                 </table>
             </FooterTemplate>
      </asp:Repeater>
      

      然后有一个类来保存你的数据

          public class MyHolder()
          {
               public string HolderId {get;set;}
               public string Text1 {get;set;}
               public string Text2 {get;set;}
          }
      

      然后列出这些并将它们绑定到您的中继器

          List<MyHolder> myHolderList = new List<MyHolder>();
          myHolderList.Add(new MyHolder {1, "hi", "hello"});
          //Add a few of these
      
          rptrptMyRepeater.DataSource = myHolderList;
          rptMyRepeater.DataBind();
      

      这一切只是我的想法,所以我有语法错误

      【讨论】:

      • 哦,正如 Johhny D 所说,将 ListView 与 UserControls 列表或类似的东西一起使用会更优雅
      【解决方案4】:

      我终于用 asp.net 中的动态表完成了这项工作。就像 RDSAGAR 一样,但通过代码背后的代码。感谢您的所有支持。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-12
        • 2012-11-30
        • 1970-01-01
        • 2013-05-08
        • 2015-10-05
        相关资源
        最近更新 更多