GridView Paging, невозможно получить правильное значение Datakey
Вид сетки
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AllowSorting="True" PagerSettings-Position="TopAndBottom"
PagerSettings-Mode="Numeric" PageSize="40" CellPadding="4" DataSourceID="dsEquipmentGridView"
ForeColor="#333333" GridLines="Horizontal" Style="font-size: x-small" AutoGenerateColumns="False"
DataKeyNames="IREF" OnRowEditing="GridView1_RowEditing" OnRowUpdated="GridView1_RowUpdated"
OnSorted="GridView1_Sorted" OnSorting="GridView1_Sorting" OnPageIndexChanged="GridView1_PageIndexChanged1"
OnPageIndexChanging="GridView1_PageIndexChanging" OnSelectedIndexChanged="GridView1_SelectedIndexChanged"
OnSelectedIndexChanging="GridView1_SelectedIndexChanging" OnRowCommand="GridView1_RowCommand"
BorderColor="Black" BorderStyle="Solid" BorderWidth="1px"
OnRowCancelingEdit="GridView1_RowCancelingEdit" onload="GridView1_Load"
ondatabound="GridView1_DataBound">
<PagerSettings Position="TopAndBottom" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<Columns>
<asp:CommandField ShowDeleteButton="False" ShowSelectButton="true" EditText="QuickEdit"
HeaderText="Manage" SelectText="Manage" />
Для первой загруженной страницы это показывает правильное значение DataKey, если я нажимаю на поле команды.
Однако, если я перейду на следующую страницу результатов, при выборе записи соответствующее значение будет неправильным. Кажется, сохранить информацию о предыдущей странице. Как мне преодолеть это?
РЕДАКТИРОВАТЬ:
В методе GridView1_SelectedIndexChanged я использовал следующее:
// Determine the index of the selected row.
int index = GridView1.SelectedIndex;
// Display the primary key value of the selected row.
HttpContext.Current.Response.Write("The primary key value of the selected row is " + GridView1.DataKeys[index].Value.ToString() + ".<br>");
GridViewRow row = GridView1.Rows[index];
int rowindex = row.RowIndex;
HttpContext.Current.Response.Write("rowindex-> " + rowindex.ToString() + "<br>");
int ID = (int)GridView1.DataKeys[row.DataItemIndex - (GridView1.PageIndex * GridView1.PageSize)].Value;
HttpContext.Current.Response.Write("row.DataItemIndex" + ID.ToString()+"<br>");
int Userid = Convert.ToInt32(GridView1.DataKeys[index].Value);
HttpContext.Current.Response.Write("Userid" + Userid.ToString() + "<br>");
Я не могу получить правильное значение после подкачки.
3 ответа
Исправлено некоторое время назад. Использовал вспомогательный класс GridView. Который нарушил нормальную функциональность GridView.
При использовании подкачки мы можем получить точный индекс строки (который считается от 0 до totalrows
в gridview) и при получении datakey
нам нужно передать индекс строки текущей страницы.
Используйте строку ниже, чтобы получить индекс текущей страницы и получить ключ данных:
// Get the correct row index since there is paging
int idx = gridViewRow.DataItemIndex - TestGridView.PageIndex * TestGridView.PageSize;
Я могу опоздать. Но для других я отвечаю на это.
"Повторите привязку gridview перед использованием массива DataKey"
меня устраивает. Надеюсь, что это работает и для других.