При использовании GridView SelectedIndex всегда 0 при использовании пользовательской кнопки выбора
При нажатии кнопки выбора в gvSquid2, x получает правильное и правильное значение. При нажатии кнопки выбора в gvSquid я получаю исключение ArgumentOutOfRange, потому что gv.SelectedIndex
= 0. Кроме того, гв.SelectedDataKey
нулевой. Как я могу получить DataKey
Информация? Поместить его в столбец недопустимо, так как он должен быть скрыт от пользователя. Скрывать столбец бесполезно, потому что во время DataBind()
, значение отбрасывается. Я разорвал этот пример с веб-сайта Microsoft. Что мне не хватает?
<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();
}
2 ответа
Решение
Я понял. EnableViewState="true"
должен быть установлен. Как только я изменил это, внезапно появились DataKeys.
Попробуйте использовать SelectedRow
вида сетки, чтобы добраться до RowIndex
, как это:
protected void gvSquid_SelectedIndexChanged(object sender, EventArgs e)
{
string x;
GridViewRow theGridViewRow = gvSquid.SelectedRow;
x = gvSquid.DataKeys[theGridViewRow.RowIndex].Value.ToString();
}