点击链接按钮获取隐藏的ID值时如何获得aspgridview的选定行

19

我正在将链接按钮与aspgridview中的标题数据绑定,并绑定包含ID值的隐藏标签。当用户点击此链接按钮时,我想要访问ID值。这是因为,如果用户登录,则我会弹出详细窗口,否则提示用户登录以获取详细信息。

在lnkTitle_Click()事件中,我试图访问所选行以查找标签控件。

GridViewRow grdSelRow = GridView1.SelectedRow;
Label lblID = (Label)grdSelRow.FindControl("lblID");

但是我得到的grdSelRow为null。

当单击gridview中的linkbutton时,如何获取所选行?

1个回答

25

问题在于当你在 GridView 中点击一个按钮时,该行只会成为被点击的行而不是SelectedRow。如果您想将其设置为SelectedRow,则必须在按钮的标记中指定CommandName="Select"

以下是两种实现您要求的方法。

在 ItemTemplate 内部为 LinkButton 连接 onclick 事件

标记

<asp:TemplateField>
    <ItemTemplate>
        <asp:LinkButton ID="LinkButton1" runat="server" 
                    Text="Click1" 
                    OnClick="LinkButton1_Click"/>
    </ItemTemplate>
</asp:TemplateField>

代码后台

protected void LinkButton1_Click(object sender, EventArgs e)
{
    GridViewRow clickedRow = ((LinkButton) sender).NamingContainer as GridViewRow;
    Label lblID = (Label)clickedRow.FindControl("lblID");
}

使用 RowCommand 捕捉 LinkButton 的点击事件。

标记

<asp:TemplateField>
    <ItemTemplate>
        <asp:LinkButton ID="LinkButton2" runat="server" 
                    Text="Click2" 
                    CommandName="MyCustomCommand"/>
    </ItemTemplate>
</asp:TemplateField>

代码后台

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if(e.CommandName.Equals("MyCustomCommand"))
    {
        GridViewRow clickedRow = ((LinkButton)e.CommandSource).NamingContainer as GridViewRow;
        Label lblID = (Label)clickedRow.FindControl("lblID");
    }
}

1
+1 @Naveen,感谢您指出:“如果您想将其设置为SelectedRow,则必须在按钮的标记中指定CommandName =“Select”。”。 - Ram
@Naveen,在显示JavaScript确认框之前,您如何标记选择的内容以便在GridView中使用?如果我在确认框中点击取消,则不会看到当前行被选中,也不会在显示确认弹出窗口之前看到所选行。 - Ram
@dasariramacharanprasad:您能详细说明并提出问题吗?我没有完全理解。 - naveen
@naveen 我们如何使用JavaScript标记网格行选择?我们可以调用任何Asp.net JavaScript方法/或者有任何方法将一行设置为已选中,但不想在该行的按钮单击上执行任何操作(因为用户在JavaScript确认弹出窗口中取消了)? - Ram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接