Linq To Sql ComboBox (DropDownList) Настройка привязки по умолчанию - PullRequest
2 голосов
/ 02 июня 2011

Мы регулярно настраиваем простые winforms, используя Linq To Sql. Недавно я обнаружил, что элемент управления ComboBox при использовании в качестве DropDownList обновляет только базовую привязку данных, когда на нее щелкают. Итак, если вы вкладываете элемент управления, нажмите первую букву, чтобы выбрать запись, а затем нажмите. Базовая привязка данных никогда не получает новое значение. По умолчанию Linq устанавливает для свойства привязки текстовое значение элемента управления ComboBox.

Исправление для этого состояло в том, чтобы изменить значение привязки linq (спасибо Commenter RedDog за указание на это).

Итак, мой вопрос таков: как настроить Visual Studio, чтобы ComboBox автоматически устанавливал bindingsource как SelectedItem, а не Text при перетаскивании из Linq в Sql источник данных? Конечно, спасает работу, но не дает ошибкам найти путь к клиентам.

1 Ответ

1 голос
/ 03 июня 2011

Итак, как указано выше, я полагаю, что вы решили это, связав вместо этого SelectedItem и убедившись, что для DataSourceUpdateMode установлено значение OnPropertyChanged.

Однако, перефразировав вопрос, вы обнаружите, что не можете изменить поведение VS. Вы должны будете сделать выбор в отношении того, что вы связываете. Существует DefaultPropertyAttribute, что , по крайней мере, некоторые разработчики слушают , но я не знаю, работает ли он для привязки.

Я добавлю, что в нашем приложении мы используем вспомогательный класс для добавления всех наших привязок вручную в коде, а не через конструктор. Это дает нам ряд преимуществ, в том числе общие поведенческие "исправления" для всех наших обязательных элементов управления. Он также позволяет нам использовать выражения LINQ для разрешения имен свойств и обеспечения того, чтобы привязки всегда были к действительным именам полей в источнике данных - если вы устанавливаете привязки через конструктор, а затем удаляете поле в своей схеме, вы не будете знать о проблеме до времени выполнения.

В случае комбо-боксов наш вспомогательный класс имел обходные пути для:

  • Всегда устанавливать DataSourceUpdateMode в OnPropertyChanged
  • Если привязано к SelectedItem или SelectedValue:
    • Затем добавьте обработчик событий Parse для сброса привязанного значения к стандартному типу привязки, когда SelectedIndex равен -1
    • Когда источник данных изменяется для поля со списком после добавления привязки, тогда необходимо сбросить SelectedIndex в выпадающем списке (заметьте, по какой-то причине пришлось делать больше специальных вещей, когда привязано к SelectedValue)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...