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

现在如何将组合框的 Item 设置为列表中第一个以外的内容?试过 comboBox.SelectedItem = someCustomer; ......还有很多其他的东西,但到目前为止还没有运气......

4

3 回答 3

14

你应该做

comboBox.SelectedValue = "valueToSelect";

或者

comboBox.SelectedIndex = n;

或者

comboBox.Items[n].Selected = true;
于 2012-04-04T17:05:36.940 回答
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 的“数据源”窗口中添加数据源。从菜单View > Other Windows > Data Sources打开它。添加一个 Object 类型的数据源Customer。在数据源中,您将看到客户的属性。通过右键单击属性,您可以更改与其关联的默认控件。

现在您可以简单地将属性从 Data Sources 窗口拖到您的表单中。当您删除第一个控件时,Visual Studio 会自动将 ABindingSource和一个组件添加到您的表单中。BindingNavigatorBindingNavigator是可选的,如果您不需要它,您可以安全地删除它。Visual Studio 也完成了所有的连接。您可以通过属性窗口对其进行调整。有时这对于组合框是必需的。

在您的代码中只剩下一件事要做:将实际数据源分配给绑定源:

customerBindingSource.DataSource = _customers;
于 2012-04-04T17:17:17.367 回答
1

这对我有用

bsCustomers.Position = comboBox.Items.IndexOf(targetCustomer);
于 2019-01-31T10:53:27.807 回答