web-dev-qa-db-ja.com

データソースにバインドされたコンボボックスにSelectedItemを設定します

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; ...そして他にもたくさんのものがありますが、今のところ運がありません...

12
mdc

やったほうがいい

comboBox.SelectedValue = "valueToSelect";

または

comboBox.SelectedIndex = n;

または

comboBox.Items[n].Selected = true;
13
Claudio Redi

バインディングコードが完全ではありません。これを試して:

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);
0
Raihan Al-Mamun