Ответ 1
Ты должен сделать
comboBox.SelectedValue = "valueToSelect";
или
comboBox.SelectedIndex = n;
или
comboBox.Items[n].Selected = true;
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;... и множество других вещей, но пока не повезло...
Ты должен сделать
comboBox.SelectedValue = "valueToSelect";
или
comboBox.SelectedIndex = n;
или
comboBox.Items[n].Selected = true;
Код привязки не завершен. Попробуй это:
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;
это работает для меня bsCustomers.Position = comboBox.Items.IndexOf(targetCustomer);