0

当单击 gvSquid2 中的选择按钮时,x 得到一个有效且正确的值。单击 gvSquid 中的选择按钮时,我得到一个 ArgumentOutOfRange 异常,因为 gv. SelectedIndex=0。此外,gv。SelectedDataKey一片空白。我如何获取DataKey信息?将其放在列中是不可接受的,因为它必须对用户隐藏。隐藏列是没有用的,因为在 期间DataBind(),该值被丢弃。我从微软的网站上摘录了这个例子。我错过了什么?

<asp:gridview ID="gvSquid2" DataSourceID="dsComments" AutoGenerateColumns="false" AutoGenerateSelectButton="true" DataKeyNames="ID" OnSelectedIndexChanged="gvSquid_SelectedIndexChanged" runat="server" EnableViewState="false">
    <Columns>
        <asp:BoundField DataField="Date" ReadOnly="true" HeaderText="Date" SortExpression="Date" />
        <asp:BoundField DataField="Comment" ReadOnly="true" HeaderText="Comment" SortExpression="Comment" />
        <asp:BoundField DataField="Username" ReadOnly="true" HeaderText="User" SortExpression="Username" />
    </Columns>
</asp:gridview> 

<asp:gridview ID="gvSquid" DataSourceID="dsComments" AutoGenerateColumns="false" DataKeyNames="ID" OnSelectedIndexChanged="gvSquid_SelectedIndexChanged" runat="server" EnableViewState="false">
  <Columns>
    <asp:CommandField ButtonType="Image" HeaderText="Select" ShowSelectButton="true" SelectImageUrl="~/includes/RedX.jpg" />
    <asp:BoundField DataField="Date" ReadOnly="true" HeaderText="Date" SortExpression="Date" />
    <asp:BoundField DataField="Comment" ReadOnly="true" HeaderText="Comment" SortExpression="Comment" />
    <asp:BoundField DataField="Username" ReadOnly="true" HeaderText="User" SortExpression="Username" />
  </Columns>
</asp:gridview> 

protected void gvSquid_SelectedIndexChanged(object sender, EventArgs e) {
    string x;
    x = gvSquid.DataKeys[gvSquid.SelectedIndex].Value.ToString();
} 
4

2 回答 2

1

尝试使用SelectedRow网格视图的 来访问RowIndex,如下所示:

protected void gvSquid_SelectedIndexChanged(object sender, EventArgs e) 
{
    string x;
    GridViewRow theGridViewRow = gvSquid.SelectedRow;
    x = gvSquid.DataKeys[theGridViewRow.RowIndex].Value.ToString();
} 
于 2013-11-20T22:22:38.420 回答
0

我想到了。 EnableViewState="true"必须设置。一旦我改变了它,突然出现了 DataKeys。

这个问题有帮助。

于 2013-11-21T14:46:56.907 回答