如何在网格视图的RowCommand方法中找到标签控件?

时间:2015-11-28 07:09:33

标签: c# asp.net gridview

GridViewRow clickedRow = ((LinkButton)sender).NamingContainer as GridViewRow;
Label lblUser = clickedRow.FindControl("lblFullName") as Label;
Label lblUserId = (Label)clickedRow.FindControl("lblUserId");

编译器抛出错误

  

无法转换'System.Web.UI.WebControls.GridView'

类型的对象

1 个答案:

答案 0 :(得分:3)

您当前代码的问题在于GridView的RowCommand事件是由gridview本身引发的,而不是由单个控件引发的,因此您的演员表会失败: -

(LinkButton)sender

因为此处的发件人是Gridview而不是链接按钮。

现在,您的gridview中可能有多个控件可以引发此事件(或者您可能会在将来添加它们),因此请在LinkBut​​ton中添加CommandName属性,如下所示: -

<asp:LinkButton ID="myLinkButton" runat="server" Text="Status" 
     CommandName="myLinkButton"></asp:LinkButton>

最后在RowCommand事件中,您可以先检查LinkButton是否引发了该事件,然后安全地使用e.CommandSource属性LinkButton来自找到Gridview的包含行。

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
   if (e.CommandName == "myLinkButton")
   {
      LinkButton lnk = (e.CommandSource) as LinkButton;
      GridViewRow clickedRow = lnk.NamingContainer as GridViewRow;
   }
}