WinForms, BindingSource, предотвращают изменение CurrentItem - PullRequest
0 голосов
/ 09 сентября 2009

Как я могу предотвратить изменение привязки текущего элемента? (нет события изменения с аргументом отмены ...)

Это сценарий:

  • У меня есть dataGridView и текстовые поля в одной форме.
  • Я использую текстовые поля для изменения значений в источнике данных (со стандартной привязкой данных)
  • Привязки пишутся вручную (после нажатия кнопки сохранения)

  • Когда пользователь выбирает другую строку с помощью DataGridView, свойство bindingSource.Current изменяется, а текстовые поля обновляются значениями из выбранной строки. Изменения, введенные пользователем, потеряны.

Есть ли способ предотвратить эту проблему?

Можно ли предотвратить изменение свойства bindingSource.Current?

Есть ли лучший способ предотвратить такое поведение?

(отключение dataGridView, как правило, не вариант)

Ответы [ 2 ]

0 голосов
/ 09 сентября 2009

Звучит так, будто вы не хотите не изменять bindingSource.Current, а хотите сохранить содержимое текстовых полей, прежде чем изменить текущую строку? Если вы связали коллекцию с bindingSource, то не будут ли текстовые поля ссылаться на свойства текущего элемента в этой коллекции?

Я не совсем уверен, что вы пытаетесь сделать, но выстрел в темноте может связать один и тот же DataSource с двумя разными BindingSource объектами, что-то вроде этого:

gridBindingSource.DataSource = theDataSource;
textBoxBindingSource.DataSource = theDataSource;
myDataGrid.DataSource = gridBindingSource;
firstNameTextBox.Bindings.Add (new Binding ("Text", textBoxBindingSource, "FirstName"));

но это было бы странно, потому что если theDataSource подходит для элемента управления сеткой, то это коллекция вещей, которые имеют свойство FirstName. Может быть, если бы вы были более конкретны в своем вопросе.


ETA: если вы хотите сохранить содержимое текстового поля в текущей строке, вызовите ValidateChildren () для контейнера до изменения свойства bindingSource.Current.

0 голосов
/ 09 сентября 2009

У меня есть несколько похожий фреймворк с сеткой и текстовыми полями в одной форме. Когда пользователь нажимает кнопку «Редактировать» (или «Добавить»), я просто отключаю сам элемент управления gridview ...

MyDataGrid.Enabled = false;

продолжить редактирование ..

Тогда в SAVE, если все в порядке,

MyDataGrid.Enabled = true;

...