Вопрос

Как я могу предотвратить изменение текущего элемента 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;

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top