Как да промените програмно реда на изгледа на мрежата в режим РЕДАКТИРАНЕ, не въз основа на номера на реда

Търся начин да променя реда на asp.net gridview в режим EDIT въз основа на първичния ключ на данните, а не въз основа на номера на реда, щракнат върху gridview.

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


person user3192613    schedule 15.01.2014    source източник
comment
Опитах код по-долу, но не помогна. protected void Row_Editing(object sender, GridViewEditArgs e) { myGridView.EditItemIndex = e.EditItemIndex; BindData(); } горното го прави въз основа на индекса на реда на мрежовия изглед, но искам да задам режима на редактиране въз основа на колоната с данни за първичния ключ на мрежовия изглед. Причината е, че докато щракването върху бутона РЕДАКТИРАНЕ ми позволява да проверя на ред #2, но тъй като самото Редактиране прави обратната връзка и опреснява данните от базата данни, #2 може да няма някои други данни, които са били изтрити, за да бъдат редактирани.   -  person user3192613    schedule 16.01.2014


Отговори (1)


Вероятно ще имам скрита колона в GridView, която съдържа PK. Когато се щракне върху бутона за редактиране, можете да използвате подходящия манипулатор, за да получите PK от този ред и да го манипулирате, както сметнете за добре.

Актуализация: След като прочетох коментара ви, не че не можете да получите PK, а че данните са били опреснени между щракването върху бутона и когато изгледът на мрежата се изобразява отново като редактируем. Във вашия сценарий потребителят може да щракне върху третия ред, за да редактира, и изведнъж той става седмият ред, защото други потребители са вмъкнали четири реда.

Простият отговор е не правете това! От една страна, това ще направи живота ви много по-труден и 2) ще бъде объркващо за потребителя, ако щракне върху третия ред за редактиране и изведнъж това е седмият ред на екрана му.

Ако по някаква причина ТРЯБВА да опресните данните, направете го, след като потребителят извърши промените си. Ако трябва да опресните данните, за да сте сигурни, че някой друг потребител не е редактирал стойностите, преди потребителят да ги актуализира, добре, ще трябва да намерите друго решение. може би родителски/детайлен екран ще работи или ще добави изскачащ прозорец, който казва, че данните са променени. (Не забравяйте, че ако стойностите внезапно се променят без предупреждение, потребителят също ще бъде объркан.)

person Dave Mroz    schedule 15.01.2014
comment
Зададох DataKeyNames в gridview с първичен ключ на данните и извличането му с помощта на DataKey на реда, за който е щракнато Редактиране в манипулатора GridView1_RowEditing, но какъвто и индекс на ред да е зададен, режимът на редактиране винаги се показва за ред, който първоначално щракнах за редактиране. Изправен съм пред проблем, при който базата данни се актуализира (редовете се добавят или изтриват) и тъй като щракването върху редактиране прави postback и опреснява данните в изгледа на мрежата, може да промени номера на реда с данни, върху който щракнах по-рано, и режимът на редактиране да се случи въз основа на номера на реда щракнах и се показва режим на редактиране за грешен ред - person user3192613; 16.01.2014
comment
Благодаря за бързия отговор! В моя сценарий данните никога няма да се актуализират, редовете ще бъдат вмъкнати или изтрити само обратно в базата данни. В момента имам команда select за gridview в HTML и дори да не опресня данните в postback, тя все още го прави при редактиране... предполагам, че е, защото имам команда select за gridview... мисля, че трябва да обвържа програмно данните и след това контролирайте обратното щракване за редактиране. - person user3192613; 16.01.2014
comment
Не, пак ще имате същия проблем, ако редовете са били изтрити (или ако PK не е автоматично увеличаваща се стойност). - person Dave Mroz; 16.01.2014
comment
Ако не се извършва актуализация зад кулисите, отменете това опресняване и трябва да сте добре. Харесва ми да пиша моите избрани изрази и да не ги обвързвам с команди, така че да имам малко повече контрол върху това, но все пак публикувайте вашия код - може да имаме проста корекция - person Dave Mroz; 16.01.2014
comment
Вярвам, че предлагате както е показано по-долу... но без успех. Щракването за редактиране все още взема номера на реда, върху който щракнах. protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindData(); } } protected void GridView1_RowEditing(изпращач на обект, GridViewEditEventArgs e) { GridView1.EditIndex = e.NewEditIndex; BindData(); } - person user3192613; 16.01.2014
comment
Първо, загубете DataBind() в метода GridView1_RowEditing, така че да не опреснява данните. Второ, EditIndex винаги ще ви даде реда за реда, така че ще трябва да използвате това число, за да получите първичния ключ, който ще трябва да имате в скрита колона в GridView. - person Dave Mroz; 16.01.2014