asp.net Repeater - 获取当前项目的参考

时间:2014-12-10 12:36:12

标签: c# asp.net data-binding repeater dataitem

我使用的是Asp.net 4.5,C#。 我有一个Reapter,它有一些DataSource绑定到它:

  <asp:Repeater ItemType="Product" ID="ProductsArea" runat="server">
            <HeaderTemplate></HeaderTemplate>
            <ItemTemplate>
                ...  
            </ItemTemplate>
            <FooterTemplate></FooterTemplate>
        </asp:Repeater>    

在这个中继器中,我想对当前的迭代项目有所了解。 我知道我可以使用<%#Item%>并且我可以使用<%#Container.DataItem%>。如果我想去某个领域,我可以使用<%#Item.fieldName%>或Eval it。

但是我想在一个字段上创建一个条件,我怎样才能得到#Item的参考来做这样的事情:

<% if (#Item.field>3)%>, <%if (#Container.DataItem.field<4)%> 

我想acautley希望有这样的参考 <%var item = #Item%&GT;而不是在我需要的时候使用它。

当然上面的语法无效,如何实现这个问题?

1 个答案:

答案 0 :(得分:0)

我会改用ItemDataBound。这使得代码更具可读性,可维护性和健壮性(编译时类型安全性)。

protected void Product_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        // presuming the source of the repeater is a DataTable:
        DataRowView rv = (DataRowView) e.Item.DataItem;
        string field4 = rv.Row.Field<string>(3); // presuming the type of it is string
        // ...
    }
}

e.Item.DataItem投射到实际类型。如果您需要在ItemTemplate使用e.Item.FindControl中找到一个控件并进行适当的转换。当然你必须添加事件处理程序:

<asp:Repeater OnItemDataBound="Product_ItemDataBound" ItemType="Product" ID="ProductsArea" runat="server">