GridView,如何获取当前行的键?

时间:2013-03-08 12:54:22

标签: asp.net gridview

如何从ASP.NET GridView控件获取当前选定的行键?
如果我处理SelectedIndexChanged事件,即使选择的记录ID被更改,也不会在分页或排序时引发它 如果我处理Sorted事件或PageIndexChanged,则null中只有GridView.SelectedValue值。

我需要根据当前选择的行更新动态添加的控件。

修改

GridView标记:

<asp:GridView ID="GridView" runat="server" AllowPaging="True" AllowSorting="True"
    AutoGenerateColumns="False" DataKeyNames="ID_USER" DataSourceID="dsUsers" OnSelectedIndexChanged="GridView_SelectedIndexChanged"
    OnRowDataBound="GridView_RowDataBound" OnSelectedIndexChanging="GridView_SelectedIndexChanging" 
    onpageindexchanged="GridView_PageIndexChanged" onsorted="GridView_Sorted">
</asp:GridView>

2 个答案:

答案 0 :(得分:1)

gridview的用户DataKeyNames属性。

 <asp:GridView ID="GridView1" runat="server" DataKeyNames="ProductID">
 </asp:GridView>

我通常通过CommandArgument传递RowIndex并使用它来检索我想要的DataKey值。

在按钮上:

CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>'

在服务器事件

int rowIndex = int.Parse(e.CommandArgument.ToString());
string val = (string)this.grid.DataKeys[rowIndex]["ProductID"];

答案 1 :(得分:1)

  

如果我处理Sorted事件或PageIndexChanged,则只有null值   在GridView.SelectedValue。

检查控件生命周期中稍后的事件中的SelectedValue。像PreRender一样:

protected void GridView1_PreRender(object sender, EventArgs e)
{
    string currentValue = GridView1.SelectedValue;
}

不要忘记将OnPreRender="GridView1_PreRender"添加到您的标记中。