我使用的是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;而不是在我需要的时候使用它。
当然上面的语法无效,如何实现这个问题?
答案 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">