Как программно изменить строку gridview в режиме EDIT не на основе номера строки

Я ищу способ изменить строку asp.net gridview в режиме EDIT на основе первичного ключа данных, а не на основе номера строки, нажатой в gridview.

Какие есть варианты.


person user3192613    schedule 15.01.2014    source источник
comment
Я пробовал код, показанный ниже, но это не помогло. защищенная недействительность Row_Editing (отправитель объекта, GridViewEditArgs e) {myGridView.EditItemIndex = e.EditItemIndex; BindData (); } вышеупомянутое делает это на основе индекса строки gridview, но я хочу установить режим редактирования на основе связанного столбца данных первичного ключа в gridview. Причина в том, что при нажатии на кнопку EDIT я проверил строку № 2, но поскольку Edit сам выполняет обратную передачу и обновляет данные из базы данных, № 2 может не иметь других данных, которые были удалены для редактирования.   -  person user3192613    schedule 16.01.2014


Ответы (1)


Я бы, вероятно, имел скрытый столбец в GridView, содержащий PK. При нажатии кнопки редактирования вы можете использовать соответствующий обработчик, чтобы получить PK из этой строки и управлять им по своему усмотрению.

Обновление: после прочтения вашего комментария дело не в том, что вы не можете получить ПК, а в том, что данные были обновлены между нажатием кнопки и тем, когда представление сетки повторно отображается как редактируемое. В вашем сценарии пользователь может щелкнуть третью строку для редактирования, и внезапно она станет седьмой строкой, потому что другие пользователи вставили четыре строки.

Простой ответ - не делайте этого! Во-первых, это значительно усложнит вашу жизнь, и 2) пользователя будет сбивать с толку, если он щелкнет третью строку, чтобы отредактировать, и вдруг это будет седьмая строка на их экране.

Если по какой-либо причине вы ДОЛЖНЫ обновить данные, сделайте это после того, как пользователь зафиксирует свои изменения. Если вам нужно обновить данные, чтобы убедиться, что какой-то другой пользователь не редактировал значения до того, как пользователь обновит их, что ж, вам придется найти другое решение. возможно, будет работать родительский / подробный экран или появится всплывающее окно, в котором сообщается, что данные были изменены. (Помните, что если значения внезапно изменятся без предупреждения, пользователь тоже будет сбит с толку.)

person Dave Mroz    schedule 15.01.2014
comment
Я установил DataKeyNames в gridview с первичным ключом данных и извлекаю его с помощью DataKey строки, для которой щелкнули Edit в обработчике GridView1_RowEditing, но любой набор индексов строки Режим редактирования всегда отображается для строки, которую я изначально щелкнул для редактирования. Я столкнулся с проблемой, когда база данных обновляется (строки добавляются или удаляются), и поскольку щелчок по редактированию выполняет обратную передачу и обновляет данные в gridview, он может изменить номер строки данных, которые я щелкнул ранее, и режим редактирования происходит в зависимости от номера строки Я щелкнул, и он приземлился, показывая режим редактирования для неправильной строки - person user3192613; 16.01.2014
comment
Спасибо за оперативный ответ! В моем сценарии данные никогда не будут обновляться, строки будут только вставляться или удаляться в базе данных. В настоящее время у меня есть команда select для gridview в HTML, и даже если я не обновляю данные в обратной передаче, она все равно делает это при редактировании ... я думаю, это потому, что у меня есть команда select для gridview ... я думаю, что я должен программно привязать данные, а затем нажмите кнопку редактирования обратной передачи. - person user3192613; 16.01.2014
comment
Нет, у вас все равно будет такая же проблема, если бы строки были удалены (или если бы PK не было автоматически увеличивающимся значением). - person Dave Mroz; 16.01.2014
comment
Если за кулисами не происходит обновления, отмените это обновление, и все будет в порядке. Мне нравится писать свои операторы выбора и не связывать их с командами, чтобы у меня было немного больше контроля над ними, но все равно публикуйте свой код - у нас может быть простое исправление - person Dave Mroz; 16.01.2014
comment
Я полагаю, вы предлагаете то, что ниже ... но не повезло. Щелчок по редактированию по-прежнему принимает номер строки, на которой я щелкнул. защищенный void Page_Load (отправитель объекта, EventArgs e) {если (! IsPostBack) {BindData (); }} protected void GridView1_RowEditing (отправитель объекта, GridViewEditEventArgs e) {GridView1.EditIndex = e.NewEditIndex; BindData (); } - person user3192613; 16.01.2014
comment
Во-первых, потеряйте DataBind() в методе GridView1_RowEditing, чтобы он не обновлял данные. Во-вторых, EditIndex всегда будет давать вам порядковый номер строки, поэтому вам придется использовать это число, чтобы получить первичный ключ, который вам понадобится в скрытом столбце в Вид сетки. - person Dave Mroz; 16.01.2014