- 題名: 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()を行っても、書き換えられません。
よろしくお願いします。