WinForms, BindingSource, предотвращают изменение CurrentItem
-
05-07-2019 - |
Вопрос
Как я могу предотвратить изменение текущего элемента BindingSource?(нет изменяющегося события с аргументом отмены ...)
Это сценарий:
- У меня есть DataGridView и текстовые поля в одной форме.
- Я использую текстовые поля для изменения значений в источнике данных (со стандартной привязкой данных)
Привязки записываются вручную (После нажатия кнопки сохранить).
Когда пользователь выбирает другую строку с помощью DataGridView, BindingSource.Текущее свойство изменяется, и текстовые поля обновляются значениями из выбранной строки.Изменения, введенные пользователем, будут утеряны.
Есть ли какой-нибудь способ предотвратить эту проблему?
Могу ли я предотвратить изменение BindingSource.Текущее свойство?
Есть ли какой-нибудь лучший вариант предотвратить такое поведение?
(отключить DataGridView, к сожалению, невозможно)
Решение
Это звучит так, как будто ты не хочешь не меняться 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
изменения в свойствах.
Другие советы
У меня есть несколько похожий фреймворк с сеткой и текстовыми полями в одной форме.Когда пользователь нажимает кнопку РЕДАКТИРОВАНИЯ (или Добавить), я просто отключаю сам элемент управления gridview...
MyDataGrid.Включено = false;
продолжайте редактирование..
Затем при СОХРАНЕНИИ, если все в порядке,
MyDataGrid.Включено = true;