ItemList FindControl适用于1个项目

时间:2015-04-18 21:48:02

标签: c# asp.net listview

我的ListView的ItemTemplate中有一个LinkBut​​ton:

<asp:ListView ID="lvNotification" runat="server">
 <ItemTemplate>
  <asp:LinkButton runat="server" ID="lbReject" OnClick="Reject_Click" CommandArgument='<%# Eval("offerID") %>' Text="Reject" />
</ItemTemplate>
</asp:ListView>

然后在我的代码中我有:

protected void Reject_Click(object sender, EventArgs e)
{
    var lbreject = lvNotification.Items[0].FindControl("lbReject") as LinkButton;
    string c = lbreject.CommandArgument;
}

ListView正确检索了4行,我放置了Eval("offerID"),它显示了列表中每个项目的offerID,但是当我将它作为CommandArgument放在LinkBut​​ton中并进行调试时,它在ListView中的任何项目上显示值1,我试图将offerID放在每个LinkBut​​ton CommandArgument中并且能够访问它,但我不能这样做。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

那是因为你总是在检查第一项(0索引)。您可以从发件人处获取LinkBut​​ton并检查其命令参数。

protected void Reject_Click(object sender, EventArgs e)
{
    var lbreject = (LinkButton)sender;
    string c = lbreject.CommandArgument;
}

答案 1 :(得分:0)

这里实际上ListView的OnItemCommand事件可以很方便。这样您就可以从单点控制所有事件:

<asp:ListView ID="lvNotification" OnItemCommand="lvNotification_OnItemCommand" runat="server">
  <ItemTemplate>
    <asp:LinkButton runat="server" ID="lbReject" CommandName="Reject_Click" CommandArgument='<%# Eval("offerID") %>' Text="Reject" />
  </ItemTemplate>
</asp:ListView>

protected void lvNotification_OnItemCommand(object sender, ListViewCommandEventArgs e)
{
    if (String.Equals(e.CommandName, "Reject_Click"))//or any other event
    {
        LinkButton lbreject = (LinkButton) sender;
        string c = lbreject.CommandArgument;
    }
}