Установите SelectedItem в поле со списком привязки к источнику данных

List<Customer> _customers = getCustomers().ToList();
BindingSource bsCustomers = new BindingSource();
bsCustomers.DataSource = _customers;
comboBox.DataSource = bsCustomers.DataSource;
comboBox.DisplayMember = "name";
comboBox.ValueMember = "id";

Теперь, как установить элемент combobox для чего-то другого, кроме первого в списке? Пробовал comboBox.SelectedItem = someCustomer;... и множество других вещей, но пока не повезло...

Ответ 1

Ты должен сделать

comboBox.SelectedValue = "valueToSelect";

или

comboBox.SelectedIndex = n;

или

comboBox.Items[n].Selected = true;

Ответ 2

Код привязки не завершен. Попробуй это:

BindingSource bsCustomers = new BindingSource();
bsCustomers.DataSource = _customers;

comboBox.DataBindings.Add(
    new System.Windows.Forms.Binding("SelectedValue", bsCustomers, "id", true));
comboBox.DataSource = bsCustomers;
comboBox.DisplayMember = "name";
comboBox.ValueMember = "id";

В большинстве случаев вы можете выполнить эту задачу в дизайнере, а не делать это в коде.

Начните с добавления источника данных в окне "Источники данных" в Visual Studio. Откройте его из меню "Вид"> "Другие Windows"> "Источники данных". Добавьте источник данных объекта типа Customer. В Источниках данных вы увидите свойства клиента. Через правый щелчок по свойствам вы можете изменить связанный с ним элемент управления по умолчанию.

Теперь вы можете просто перетащить свойство из окна "Источники данных" в форму. Visual Studio автоматически добавляет A BindingSource и компонент BindingNavigator в вашу форму, когда вы BindingNavigator первый элемент управления. BindingNavigator является обязательным, и вы можете безопасно удалить его, если он вам не нужен. Visual Studio также выполняет всю проводку. Вы можете настроить его через окно свойств. Иногда это требуется для комбинированных ящиков.

В вашем коде осталось только одно: назначьте фактический источник данных в источник привязки:

customerBindingSource.DataSource = _customers;

Ответ 3

это работает для меня bsCustomers.Position = comboBox.Items.IndexOf(targetCustomer);