List<Customer> _customers = getCustomers().ToList();
BindingSource bsCustomers = new BindingSource();
bsCustomers.DataSource = _customers;
comboBox.DataSource = bsCustomers.DataSource;
comboBox.DisplayMember = "name";
comboBox.ValueMember = "id";
次に、コンボボックスの項目をリストの最初のもの以外に設定するにはどうすればよいですか?試した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";
ほとんどの場合、コードで実行する代わりに、デザイナーでこのタスクを実行できます。
VisualStudioの[データソース]ウィンドウでデータソースを追加することから始めます。メニューから開く[表示]> [その他のウィンドウ]> [データソース]。 Customer
タイプのオブジェクトデータソースを追加します。データソースには、顧客のプロパティが表示されます。プロパティを右クリックすると、それに関連付けられているデフォルトのコントロールを変更できます。
これで、プロパティを[データソース]ウィンドウからフォームにドラッグするだけで済みます。最初のコントロールをドロップすると、Visual Studioは自動的にA BindingSource
およびBindingNavigator
コンポーネントをフォームに追加します。 BindingNavigator
はオプションであり、不要な場合は安全に削除できます。 VisualStudioもすべての配線を行います。プロパティウィンドウで微調整できます。コンボボックスでこれが必要になる場合があります。
コードで行うべきことは1つだけです。実際のデータソースをバインディングソースに割り当てます。
customerBindingSource.DataSource = _customers;
これは私のために働きます
bsCustomers.Position = comboBox.Items.IndexOf(targetCustomer);