以不同方式处理asp.net转发器的最后一次迭代

时间:2011-01-18 19:58:32

标签: asp.net

是否可以在转发器的最后一次迭代中检测或使用asp.net转发器中的不同模板?

如果不是,我可以只使用for循环,但我很好奇是否可以完成。

4 个答案:

答案 0 :(得分:5)

如果你知道你期望有多少项,你可以使用e.Item.ItemIndex属性来检查你是否在最后一项。或者,根据您要执行的操作,您可以利用页脚模板。

答案 1 :(得分:3)

您可以直接以这种方式执行此操作,代码将在最后一项中应用“Last”类。你可以相应地应用你的造型。

 <asp:Repeater ID="rptrMainContent" runat="server">
  <ItemTemplate>
   <li class="<%#Container.ItemIndex==(rptrMainContent.DataSource as IList).Count-1?"Last":"" %>">
some text
   </li>
  </ItemTemplate>
 </asp:Repeater>

答案 2 :(得分:2)

有时我通过在ItemTemplates中使用PlaceHolder实例来完成此操作。即:

<ItemTemplate>
<asp:PlaceHolder id="phIsNotLastOne" runat="server">Is not last</asp:PlaceHolder>
<asp:PlaceHolder id="phIsLastOne" runat="server">Is last</asp:PlaceHolder>
</ItemTemplate>

我通常有一个变量来跟踪我的类中的OnItemDataBound计数器作为受保护的类成员:

protected int _bindCtr = 0;

然后在我的ItemDataBound方法中:

protected void MyItemDataBound(object sender, RepeaterItemEventArgs args)
{
    if (args.Item.ItemType == ListItemType.AlternatingItem || 
        args.Item.ItemType == ListItemType.Item)
    {
        ++this._bindCtr;
        this.phIsLastOne.Visible = this._bindCtr == this._dataSource.Count;
        this.phIsNotLastOne.Visible = this._bindCtr < this._dataSource.Count;
    }
}

或多或少。只需确保您的数据源可评估,并在绑定前将计数器设置为0。

最好按建议查看ItemIndex,而不是上面的方法。 Repeater类型还有一个DataSource属性,该属性不是强类型的,但具有对数据源的引用。

答案 3 :(得分:0)

另一种选择是创建一个局部变量来保存绑定到转发器的项目数。

然后当您在OnItemDataBound事件中时,检查当前项索引(e.Item.ItemIndex)是否等于count - 1(需要-1,因为项索引是基于0)

因此...

if (e.Item.ItemIndex == (repeaterItemCount - 1))
{
    // Work on last item here...
}