2009-09-09 1 views
0

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

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

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

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

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

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

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

(отключение DataGridView является unfortinutelly не вариантом)

ответ

0

Похоже, вы не хотите изменять 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

Ваш ответ определенно дал мне новую перспективу для моей проблемы. Это может быть легко решением проблемы. – Emir

+0

Это решение, которое я реализую. Это сложнее, чем просто отключить сетку, но она дает мне больше возможностей (пользователи могут просматривать сетку при добавлении новой записи, например, для справочной цели) – Emir

0

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

MyDataGrid.Enabled = false;

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

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

MyDataGrid.Enabled = истина;

+0

Отключает ли datagridview запутывание для конечных пользователей? Вы изменили внешний вид отключенной сетки? – Emir

+0

+1.Я также, вероятно, установил бы BackColor в Control или Butonface – Steve

+0

Самый простой ответ - это просто включить/отключить сетку. Если вы хотите полюбоваться и изменить цвета, шрифты или другие вещи, которые вы можете. Я даже видел в других потоках, как люди создадут объект «формы», который может иметь мягкий оттенок серого или другого визуального индикатора, и иметь прямое перекрытие всей сетки на основе ее положений/координат. Затем отобразите/спрячьте этот элемент управления, включив/отключив сетку соответственно, чтобы дать пользователю визуальный индикатор того, что он отключен. – DRapp