DataSet.HasChanges е вярно дори веднага след стартирането на TableAdapter.Update

Имам наследен код за набор от данни, който актуализирам. Опитвам се да определя дали има промени в набора от данни, за да мога правилно да изпратя заявка за запазване. Въпреки това myDataset.HasChanges() винаги връща true.

В моя метод за запазване редактирах кода, за да определя кога наборът от данни се променя и направих кода така:

1. myBindingSource.EndEdit()
2. myTableAdapter.Update(myDataSet)
3. myBindingSource.EndEdit()

След ред 1, - myDataSet.HasChanges = true (разбираемо)
След ред 2, - myDataSet.HasChanges = false (разбираемо)
След ред 3, - myDataSet.HasChanges = true

Не съм сигурен защо това ще се случи в ред 3, не трябва ли това да е невярно, защото току-що стартирах актуализациите на набора от данни?


person Nathan Koop    schedule 12.03.2010    source източник


Отговори (2)


Възможно е да има елемент на потребителския интерфейс, който причинява промяна на стойност в dataSet/dataTable.

Опитайте своя код в просто конзолно приложение без обвързване на данни.

person Pilgerstorfer Franz    schedule 15.10.2010
comment
Има свързани с данни елементи, които са задействали събития, които са се променили, но не са променили данните - person Nathan Koop; 15.10.2010
comment
@NathanKoop Открихте ли поправка? Имам точно същия проблем. - person styfle; 20.09.2013
comment
Ако си спомням правилно (беше преди няколко години), смятам, че имах задействане на събитие Textbox.OnChange и това би променило някои други текстови полета, което след това ще промени набора от данни. - person Nathan Koop; 20.09.2013
comment
@styfle, за да разширя малко повече, мисля, че това, което накрая направих, беше да добавя булеф IsSaving и в моите събития поставих отметка на IsSaving и игнорирах модификацията на потребителския интерфейс. Вероятно има по-добър начин, но бързах и тогава проектът продължи. - person Nathan Koop; 20.09.2013

Вашият TableAdapter обновява ли вашия DataSet? Ако е така, тогава вероятно имате нещо като ключ, който се инициализира (запомнете, GUID==добро, Int==лошо). Това е точно като когато попълвате от TableAdapter, трябва да извикате AcceptChanges, за да възстановите състоянието на всички редове до непроменено.

person Payton Byrd    schedule 13.03.2010
comment
Не съм сигурен дали опресняването на TableAdapter е данните. Всичко, което прави, е АКТУАЛИЗАЦИЯ ... WHERE id = @myId; Опитах се да добавя AcceptChanges там (между редове 2 и 3) и пак получих същия резултат. Използвам int (не е моят db дизайн и не мога да го променя). Също така не трябва да има инициализиране на ключове, в ситуацията, която тествам, зареждам формуляра (тонове обвързвания на данни и т.н.) и след това натискам бутона за запазване, без да променям никакви данни и това се случва - person Nathan Koop; 15.03.2010