Управление связыванием с CurrencyManager без BindingSource - PullRequest
1 голос
/ 17 августа 2011

Я решил не использовать класс bindingSource, а реализовать функцию привязки в моем приложении Windows Form.Мне удается в некоторых моментах, но мало осложнений.Я хотел бы выяснить причину.У меня есть DataTable, заполненный из источника данных и трех элементов управления: textbox1, textbox2, checkedBox1.Мне удалось связать элементы управления и показать значения с помощью;

txtBox1.DataBindings.Add("Text", myTable, "NAME", true, DataSourceUpdateMode.Never);

Как вы уже догадались, myTable - это таблица данных, содержащая данные, заполненные из таблицы базы данных.Я могу получить текущие значения строки с помощью CurrencyManager, например;

DataRow dr = ((DataRowView)this.BindingContext[myTable].Current).Row;

Но когда я хочу изменить значения, используя текущую строку, каким-то образом после первого набора полей, другие автоматически изменяются на предыдущие значения.Я имею в виду:

dr["NAME"]= textBox1.Text;


dr["SURNAME"] = textBox2.Text;  //this set seems useless

Первое назначение работает, но затем форма управляет этим textBox2, checkBox1 меняет свои значения обратно на исходные до начала редактирования.Таким образом, я не могу обновить полную строку таким образом.
С другой стороны, с использованием BindingSource я получу текущую строку в похожем стиле:

DataRow drB = ((DataRowView)bindingSource1.Current).Row;

И изменим поля этой строки следующим образом:

drB["NAME"] = textBox1.Text;
drB["SURNAME"] = textBox2.Text;
drB["ACTIVE"] = checkBox1.Checked;

с завершением редактирования:

bindingSource1.EndEdit();

Вся таблица готова к обновлению, поскольку вся строка успешно изменена.Я хотел бы увидеть разницу и управлять ею без использования bindingSource.Означает ли это, что я должен использовать то, что делает EndEdit ()?Чего мне не хватает или забыть об одержимости?

Ответы [ 2 ]

0 голосов
/ 19 августа 2011

Правильный ответ показал себя, потому что я пропустил небольшой сигнал.Это использовало временные переменные перед непосредственным изменением поля datarow из контрольных значений.Таким образом, даже когда контрольные значения вернулись к своим первоначальным значениям, мы могли бы снова добиться изменения целых полей строки, таким образом, в конечном итоге управляющие значения перешли к новым значениям.изменилось после первого назначения, в конце они все с новыми значениями.
Если кому-то нужно, удачи.

0 голосов
/ 17 августа 2011

После первого изменения (dr["NAME"]= textBox1.Text;) OnPropertyChanged / OnListChanged поднимается из привязки.второе текстовое поле и флажок прослушивают это сообщение и обновляют там значения, но эти значения являются старыми.

...