【问题标题】:Horizontal table using Repeater使用中继器的水平表
【发布时间】:2011-10-18 08:28:52
【问题描述】:

我正在尝试使用中继器获取下表。

<table>
    <tr>
        <td>Description:</td>
        <td>Start time:</td>
        <td>End time:</td>
        <td>Game type:</td>
        <td>Description:</td>
        <td>Start time:</td>
        <td>End time:</td>
        <td>Game type:</td>
    </tr>
    <tr>
        <td>Data1</td>
        <td>Data2</td>
        <td>Data3</td>
        <td>Data4</td>
        <td>Data1</td>
        <td>Data2</td>
        <td>Data3</td>
        <td>Data4</td>
    </tr>
</table>

但我不知道该怎么做。我尝试了以下方法:

<asp:Repeater ID="rptGames" runat="server">
    <HeaderTemplate>
        <table>
        <tr>
    </HeaderTemplate>
        <ItemTemplate>
            <td>Description:</td>
            <td>Start time:</td>
            <td>End time:</td>
            <td>Game type:</td>
        </ItemTemplate>
        <SeparatorTemplate>
            </tr><tr>
        </SeparatorTemplate>
        <AlternatingItemTemplate>
            <td><%# Eval("Description") %></td>
            <td><%# Eval("StartTime") %></td>
            <td><%# Eval("EndTime") %></td>
            <td><%# Eval("GameType") %></td>
        </AlternatingItemTemplate>
    <FooterTemplate>
        </tr>
        </table>
    </FooterTemplate>
</asp:Repeater>

如果在最后应用分隔符模板,效果会很好。 那么,对于每个数据项使用单独的表,让这种模式发挥作用的唯一方法是什么?或者有没有一种方法可以让我使用一张桌子来实现我的目标?

【问题讨论】:

  • 感谢所有答案,但他们没有创建我想要的表格。如示例所示,我需要一遍又一遍地重复标题 2(连同数据项)。 (记住标题模板只打印一次)
  • 哦,我错了。考虑到您的评论,我更新了答案

标签: html asp.net .net html-table repeater


【解决方案1】:

您需要将&lt;tr&gt; 放入您的项目模板(以及交替项目模板)(而不是标题)。

<ItemTemplate>
<tr>
   <td>Description:</td>
   <td>Start time:</td>
   <td>End time:</td>
   <td>Game type:</td>
</tr>
</ItemTemplate>

然后调整你的分隔符模板:

<SeparatorTemplate>
   <tr></tr>
</SeparatorTemplate>

【讨论】:

    【解决方案2】:

    试试这样:

    更新:要重复标题(根据 OP 的评论),请像这样修改它(如果您想要更多列,请在每个 tr 中添加更多 tds):

    注意:假设 OP 想要以不同的方式设置标题,添加了背景颜色(只是为了提供一个想法)。

    <asp:Repeater ID="rptGames" runat="server">
        <HeaderTemplate>
            <table>
        </HeaderTemplate>
            <ItemTemplate>
                <tr style="background-color: whiteSmoke">
                  <td>Description:</td>
                  <td>Start time:</td>
                  <td>End time:</td>
                  <td>Game type:</td>
                </tr>
            </ItemTemplate>
            <AlternatingItemTemplate>
              <tr>
                <td><%# Eval("Description") %></td>
                <td><%# Eval("StartTime") %></td>
                <td><%# Eval("EndTime") %></td>
                <td><%# Eval("GameType") %></td>
              </tr>
            </AlternatingItemTemplate>
        <FooterTemplate>
            </table>
        </FooterTemplate>
    </asp:Repeater>
    

    【讨论】:

    • 为什么还要包含 AlternatingItemTemplate?它与 ItemTemplate 相同。
    • @zeroef -- 如果他将 放入交替项目模板中,那么他必须将 放入其中。这就是为什么。
    • @Kuru - 什么?如果我错了,请纠正我,但交替模板应该与 ItemTemplate 不同(例如:用于交替行颜色)他的 AlternatingItemTemplate 与 ItemTemplate 完全匹配。
    • @zeroef -- 是&否......你说得对,如果它的格式与项目模板完全相同,他就不需要需要交替项目模板——但是您可以在原始问题中看到他无论如何都在使用一个(这并没有什么真正的问题-只是没有必要)。也许他稍后会开始格式化颜色等。我的意思是,如果他要使用交替行模板(其中包含 标记),那么它需要包含 。
    • @zeroef:这个想法是给他一些他可以复制/粘贴的东西。他稍后可以将样式等添加到AlternatingItemTemplate。我把它留在那里,就像它在 OP 的帖子中一样。我仍在等待听到为什么它被否决。
    【解决方案3】:

    您可以尝试在 HeaderTemplate 中写入表的标题,在 ItemTemplate 中写入行;-)

    编辑:首先,我认为您只希望标题出现在标题中,并且每行代表数据项。所以我建议了以下代码:

    <asp:Repeater ID="rptGames" runat="server">
        <HeaderTemplate>
            <table>
            <tr>
                <td>Description:</td>
                <td>Start time:</td>
                <td>End time:</td>
                <td>Game type:</td>
            </tr>
        </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td><%# Eval("Description") %></td>
                    <td><%# Eval("StartTime") %></td>
                    <td><%# Eval("EndTime") %></td>
                    <td><%# Eval("GameType") %></td>
                </tr>
            </ItemTemplate>
        <FooterTemplate>
            </table>
        </FooterTemplate>
    </asp:Repeater>
    

    现在,在您发表评论后,您希望在每个数据项上方重复标题,我建议如下:

    <asp:Repeater ID="rptGames" runat="server">
        <HeaderTemplate>
            <table>
        </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td>Description:</td>
                    <td>Start time:</td>
                    <td>End time:</td>
                    <td>Game type:</td>
                </tr>
                <tr>
                    <td><%# Eval("Description") %></td>
                    <td><%# Eval("StartTime") %></td>
                    <td><%# Eval("EndTime") %></td>
                    <td><%# Eval("GameType") %></td>
                </tr>
            </ItemTemplate>
        <FooterTemplate>
            </table>
        </FooterTemplate>
    </asp:Repeater>
    

    注意:您使用的AlternatingItemTemplate 也代表一个数据项。通过使用它,您有机会为每个项目以不同的方式显示数据项(通常您对奇数和偶数行号使用不同的背景颜色)

    编辑 2: 我希望,这次我正确理解了这个问题:-)

    <asp:Repeater ID="rptGames" runat="server" OnItemCreated="rptGames_ItemCreated">
        <HeaderTemplate>
            <table>
        </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td>Description:</td>
                    <td>Start time:</td>
                    <td>End time:</td>
                    <td>Game type:</td>
                    <td>Description:</td>
                    <td>Start time:</td>
                    <td>End time:</td>
                    <td>Game type:</td>
                </tr>
                <tr>
                    <td><%# Eval("Description") %></td>
                    <td><%# Eval("StartTime") %></td>
                    <td><%# Eval("EndTime") %></td>
                    <td><%# Eval("GameType") %></td>
            </ItemTemplate>
            <AlernatingItemTemplate>
                    <td><%# Eval("Description") %></td>
                    <td><%# Eval("StartTime") %></td>
                    <td><%# Eval("EndTime") %></td>
                    <td><%# Eval("GameType") %></td>
                </tr>
            </AlernatingItemTemplate>
    
    </asp:Repeater>
    

    在后面的代码中(在 rptGames_ItemCreated 中),您可以根据数据项的计数将页脚的模板设置为 &lt;/table&gt;&lt;/tr&gt;&lt;/table&gt; 注意:我没有测试过这个

    【讨论】:

    • 即使您每次都重复标题,它也不是原始示例显示的 8 列宽。
    【解决方案4】:

    将表格标题行移动到标题中,并将每个项目封装在 tr 中

    <asp:Repeater ID="rptGames" runat="server">
        <HeaderTemplate>
            <table>
            <tr>
                <td>Description:</td>
                <td>Start time:</td>
                <td>End time:</td>
                <td>Game type:</td>
            </tr>
        </HeaderTemplate>
            <ItemTemplate>
               <tr>
                <td><%# Eval("Description") %></td>
                <td><%# Eval("StartTime") %></td>
                <td><%# Eval("EndTime") %></td>
                <td><%# Eval("GameType") %></td>
               </tr>
            </ItemTemplate>
        <FooterTemplate>
            </table>
        </FooterTemplate>
    </asp:Repeater>
    

    【讨论】:

      【解决方案5】:

      试试这个:

      <asp:Repeater ID="rptGames" runat="server">
          <HeaderTemplate>
              <table>
          </HeaderTemplate>
              <ItemTemplate>
                <tr>
                    <th>Description:</th>
                    <th>Start time:</th>
                    <th>End time:</th>
                    <th>Game type:</th>
                    <th>Description:</th>
                    <th>Start time:</th>
                    <th>End time:</th>
                    <th>Game type:</th>
                  </tr>
                <tr> 
                  <td><%# Eval("Description") %></td>
                  <td><%# Eval("StartTime") %></td>
                  <td><%# Eval("EndTime") %></td>
                  <td><%# Eval("GameType") %></td>
              </ItemTemplate>
              <AlternatingItemTemplate>
                  <td><%# Eval("Description") %></td>
                  <td><%# Eval("StartTime") %></td>
                  <td><%# Eval("EndTime") %></td>
                  <td><%# Eval("GameType") %></td>
                </tr>
              </AlternatingItemTemplate>
          <FooterTemplate>
              </table>
          </FooterTemplate>
      </asp:Repeater>
      

      我在示例中遇到的唯一问题是,如果记录数不是偶数,则关闭&lt;/tr&gt; 将不会被打印,并且表格可能会失控。我相信你可以在后面的代码中检查它并为此添加一个 hack。也许您可以在运行时修改literal

      更新

      该代码应产生以下结果,其中包含六条记录:

      <table>
          <tr>
              <td>Description:</td>
              <td>Start time:</td>
              <td>End time:</td>
              <td>Game type:</td>
              <td>Description:</td>
              <td>Start time:</td>
              <td>End time:</td>
              <td>Game type:</td>
          </tr>
          <tr>
              <td>Data1</td>
              <td>Data2</td>
              <td>Data3</td>
              <td>Data4</td>
              <td>Data1</td>
              <td>Data2</td>
              <td>Data3</td>
              <td>Data4</td>
          </tr>
          <tr>
              <td>Description:</td>
              <td>Start time:</td>
              <td>End time:</td>
              <td>Game type:</td>
              <td>Description:</td>
              <td>Start time:</td>
              <td>End time:</td>
              <td>Game type:</td>
          </tr>
          <tr>
              <td>Data1</td>
              <td>Data2</td>
              <td>Data3</td>
              <td>Data4</td>
              <td>Data1</td>
              <td>Data2</td>
              <td>Data3</td>
              <td>Data4</td>
          </tr>
          <tr>
              <td>Description:</td>
              <td>Start time:</td>
              <td>End time:</td>
              <td>Game type:</td>
              <td>Description:</td>
              <td>Start time:</td>
              <td>End time:</td>
              <td>Game type:</td>
          </tr>
          <tr>
              <td>Data1</td>
              <td>Data2</td>
              <td>Data3</td>
              <td>Data4</td>
              <td>Data1</td>
              <td>Data2</td>
              <td>Data3</td>
              <td>Data4</td>
          </tr>
      </table>
      

      .

      【讨论】:

      • 表格标题将每隔一个迭代重复一次。
      • @brenjt - 按照设计。我阅读了项目要求;)“我需要一遍又一遍地重复标题 2(连同数据项)”
      • 您得到的最终结果几乎与 Stephan Bauer 相同,只是您记住了 FooterTemplate。所以赞成票是你的。
      猜你喜欢
      相关资源
      最近更新 更多
      热门标签