- 題名: ComboBoxの再描写
- 日時: 2011/12/08 20:19:23
- ID: 29450
- この記事の返信元:
- (なし)
- この記事への返信:
- [29451] Re[1]: ComboBoxの再描写2011/12/08 21:49:01
- ツリーを表示
■No29450に返信(さいさんの記事) > ComboBoxの表示部分を再描写させるにはどうしたらよいでしょうか? そのアイテムをセットしなおしてやれば、表示も更新されます。 comboitem a = (comboitem)this.comboBox1.Items[0]; a.text = "New Text"; this.comboBox1.Items[0] = a; comboBox1.Items.Add ではなく、comboBox1.DataSource 経由で 表示させている場合は、データソース自体をセットしなおします。 this.comboBox1.DataSource = null; // 一時的に解除 this.comboBox1.DataSource = 元データ; //再セット アイテムをセットしなおさずに更新するのであれば、 データが変更されたことをComboBox に通知する必要があります。 これにはたとえば、BindingSource を使う方法があります。 ComboBox の DataSource にこれを指定して // comboitem のコレクション; List<comboitem> list = new List<comboitem>(); : this.bindingSource1.DataSource = list; this.comboBox1.DataSource = this.bindingSource1; などとしておきます。 修正したことを通知するためには、 list[0].text = newValue; bindingSource1.ResetItem(0); などとしてやります。 あるいは comboitem で管理する代わりに、DataTable を使うのも良いでしょう。 DataTable の場合は、それ自体に変更通知機能が備わっています。 DataTable tbl = new DataTable(); : tbl.Columns.Add("id"); tbl.Columns.Add("text"); tbl.Rows.Add(…); tbl.Rows.Add(…); tbl.Rows.Add(…); : comboBox1.DataSource = tbl; comboBox1.DisplayMember = "text"; 上記の場合、DataTable を直接 tbl.Rows[0]["text"] = newValue; などと編集すれば、即座に反映されます。 あるいは、自身が作成したコレクションに 変更通知を実装するという手もあります。
分類:[.NET]
はじめまして。
ComboBoxの表示部分を再描写させるにはどうしたらよいでしょうか?
フォームにComboBox1とButton1があり、ComboBox1には以下のようなクラスが入っています。
class comboitem {
public string text { get; set; }
public string id { get; set; }
public comboitem(string _id, string _text) {
text = _text;
id = _id;
}
public override string ToString() {
return text;
}
}
Button1を押すと、このクラスのtextの部分を書き換えて、ComboBox1の表示切り替えたいと考えています。
ですが、ComboBox1.Refresh()を行っても、this.Refresh()を行っても、書き換えられません。
よろしくお願いします。