|
■No80826 (あ さん) に返信 > 下記のようなコードを使っているのですが > これはデータバインドしているのでしょうか? > > With ComboBox3 > .AddItem "aaa" > .AddItem "bbb" > .AddItem "ccc" > .AddItem "ddd" > End With > > ComboBox2.list = ComboBox3.list
それは「データバインドしている」ということではなさそうですね。
以前この掲示板の別スレッド(消えてしまったようで出てこない)で検証用に作った サンプルですが、例えば以下の comboBox1 ようにデータバインドできます(この例 では SQL Server データベースより取得したデータで DataTable を作ってそれをデ ータバインドしています)。
comboBox2 は CreateDictionary メソッドで Dictionary オブジェクトを作って、 Combobox のアイテムとして設定しています。データーバインドしているわけではな いですがこういうことも出来るということでご参考まで。
private void Form11_Load(object sender, EventArgs e) { this.tableAdaptor.Fill(this.dataset.Customers);
// DataSource の設定は最後にすること。最初に持ってくると、DisplayMember、 // ValueMember の設定時に余計なデータバインドが起こる。 this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList; this.comboBox1.DisplayMember = "CustomerID"; this.comboBox1.ValueMember = "CompanyName"; this.comboBox1.DataSource = this.dataset.Customers;
this.dictionary = CreateDictionary(); this.comboBox2.DropDownStyle = ComboBoxStyle.DropDownList; this.comboBox2.Items.AddRange(this.dictionary.Keys.ToArray()); this.comboBox2.SelectedIndex = 0; }
private Dictionary<string, string> CreateDictionary() { Dictionary<string, string> dictionary = new Dictionary<string, string>(); dictionary.Add("あ", "AAA"); dictionary.Add("い", "BBB"); dictionary.Add("う", "CCC"); dictionary.Add("え", "DDD"); return dictionary; }
例えば comboBox3, comboBox4 等を追加して、comboBox1, comboBox2 と同じアイテム を表示するのであれば、DataTable オブジェクトや Dictionary オブジェクトのインス タンスを保持してそれを使い回すことができます。
> 以下のコードでうまくいきました。 > ComboBox2.Items.AddRange(ComboBox1.Items.Cast(Of Object)().ToArray())
それとどちらが良いかはケースバイケースだと思います。
|