【问题标题】:ASP Repeater - ItemTemplateASP 中继器 - ItemTemplate
【发布时间】:2010-05-07 17:21:53
【问题描述】:

下午好。

我有一个带有 ItemTemplate 的中继器,它打印一列数据。

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

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

</asp:Repeater>

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

提前致谢。

【问题讨论】:

  • 我认为 ItemTemplate 是一个 元素,其中一个 元素包含数据?

标签: asp.net repeater


【解决方案1】:

编辑显示使用中继器进行三列布局

<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 控件而不是转发器。

【讨论】:

  • 我的目标是将数据从左到右显示为 3 列,n 行。有没有可能使用中继器来做到这一点?
  • 如果我理解你想要做什么,DataList 会很容易做到这一点。使用中继器,您可以做到这一点,但您需要根据记录数有条件地显示 和 元素(例如,每隔三条记录,显示 以开始一个新的行)。
  • 使用 ItemTemplate、AlternatingItemTemplate 以及 和 是否可以像我想要的那样使用三列?我只能使用它们创建一条包含两列的行,而无需重复数据。 :(
  • 我不这么认为,但我真的不知道你想详细做什么。正如您所指出的,使用 ItemTemplate 和 AlternatingItemTemplate 只能获得 2 个部分。我建议使用 PlaceHolder 控件来包含您的 、、 和 元素。计算中继器 ItemCreated 事件中的列数,并根据需要显示或隐藏行和单元格元素以获得所需的布局。如果这对您不起作用,请发布有关您拥有的数据的一些详细信息以及您想要的输出图片。
  • 嗯,你可以在这里看到我想要的部分代码和输出:imgur.com/DAEO0.png
【解决方案2】:

确保将所有标记封装在单个控件中以防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> 

【讨论】:

    【解决方案3】:

    如果您使用的是 ASP.net 3.5 或更高版本,您应该使用 ListViewGroupTemplate

    例如代码,见...

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

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签