Я решил не использовать класс 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 ()?Чего мне не хватает или забыть об одержимости?