项目循环Repeater的ItemDataBound事件中的所有项目

时间:2015-10-06 11:14:56

标签: c# asp.net repeater

我的aspx页面中有一个正常的Repeater控件

 <asp:Repeater ID="rpt1" runat="server" OnItemDataBound="rpt1_ItemDataBound">
<ItemTemplate>
<asp:CheckBox ID="chks" runat="server" />
<asp:TextBox ID="txtName" runat="server" CssClass="form-control" Text='<%# DataBinder.Eval(Container,"DataItem.Name").ToString()%>'></asp:TextBox><asp:Label ID="lblValue" runat="server" Visible="false" Text='<%# DataBinder.Eval(Container,"DataItem.Id").ToString() %>'></asp:Label>
</ItemTemplate>
</asp:Repeater>

在按钮上单击我将数据绑定到Repeater

rpt1.DataSource = GetData();
rpt1.DataBind();

绑定后调用ItemDataBound事件。因为我正在循环转发器项目进行一些操作

protected void rpt1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{

    foreach (RepeaterItem item in rpt1.Items)
    {
        if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
        {
             string val = ((Label)item.FindControl("lblValue")).Text;
            // Some Stuff
        }
    }
}

问题是循环每次都从第一次开始。

对于Ex,如果我的数据是1 2 3那么......

它正在迭代为

1
1 2
1 2 3

我怎样才能成为

1
2
3

我做错了什么

1 个答案:

答案 0 :(得分:4)

已经为转发器中的每个项目调用了{p> ItemDataBound,因此您不需要在那里进行循环。

protected void rpt1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
         string val = ((Label)e.Item.FindControl("lblValue")).Text;
        // Some Stuff
    }
}

侧注:这适用于所有Data-Bound Web Server Controls