ASP中继器 - ItemTemplate

时间:2010-05-07 17:21:53

标签: asp.net repeater

下午好。

我有一个带有ItemTemplate的Repeater,它打印一个包含数据的列。

<asp:Repeater id="OtherProductsRepeater" runat="server">

    <ItemTemplate>
(...data...)
        </ItemTemplate>

</asp:Repeater>

如何修改代码而不是一列创建三列来显示数据?

提前致谢。

3 个答案:

答案 0 :(得分:5)

编辑显示使用转发器制作三列布局

<table>
<asp:Repeater id="OtherProductsRepeater" OnItemCreated="OtherProductsRepeater_ItemCreated" runat="server"> 
  <ItemTemplate> 

    <asp:PlaceHolder id="row_end" visible="<%# _showRowEnd %>" runat="server">
    </tr>
    </asp:PlaceHolder>

    <asp:PlaceHolder id="row_start" visible="<%# _showRowStart %>" runat="server">
    <tr>
    </asp:PlaceHolder>

      <td>(data)</td>
      <td>(data)</td>
      <td>(data)</td>

  </ItemTemplate> 
</asp:Repeater> 

  </tr> <%-- close final row --%>
</table>

在您的代码中,您需要这些页面级成员:

private int _rowCounter = 0;
protected bool _showRowEnd;
protected bool _showRowStart;

和事件处理程序:

protected void OtherProductsRepeater_ItemCreated(Object Sender, RepeaterItemEventArgs e) {
  if (_rowCounter == 0) {  // first row
    _showRowStart = true;
    _showRowEnd = false;
    _rowCounter = 1;
  }
  else if (_rowCounter == 3) {
    _showRowStart = true;
    _showRowEnd = true;
    _rowCounter = 1;
  }
  else {
    _showRowStart = false;
    _showRowEnd = false;
    _rowCounter += 1;
  }
}

另一个想法 - 如果你在谈论报纸式的列,其中内容从一列的底部流向下一列的顶部,使用DataList控件而不是转发器。

答案 1 :(得分:1)

请确保在visible=falseitem.count=0

的情况下将所有标记封装在单个控件中
<asp:Repeater id="OtherProductsRepeater" runat="server"> 
  <HeaderTemplate>
      <table>
  </HeaderTemplate>
  <ItemTemplate> 
    <tr>
      <td>(data)</td>
      <td>(data)</td>
      <td>(data)</td>
    </tr>
  </ItemTemplate> 
  <FooterTemplate>
      </table>
  </FooterTemplate>
</asp:Repeater> 

答案 2 :(得分:0)

如果您使用的是ASP.net 3.5或更高版本,则应使用 ListView GroupTemplate

例如代码,请参阅...

http://www.4guysfromrolla.com/articles/010208-1.aspx