- PR -

コンボボックスのデータソース変更結果を即時反映させる方法

投稿者投稿内容
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-03-17 17:12
以前、Jittaさんに教えていただいてから、データソースを使ったコンボボックス
の設定ばかりを、サルのように使っているのですが、この度、ある条件に応じて動
的にコンボボックスの選択肢を変える必要性がでてきました。

しかし、一度表示したコンボボックスのデータソースを変更しても、選択肢が変わ
りません。

何かメソッドが用意されているのでしょうか?
refresh() など試してみたのですが駄目でした。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-17 17:34
実際どのように書かれているのでしょうか?
_________________
囚人のジレンマな日々
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-03-17 17:40
引用:

囚人さんの書き込み (2006-03-17 17:34) より:

実際どのように書かれているのでしょうか?



こんな感じです。

コード:
private void selectedItems_Changed(object sender, EventArgs e) {
    this.comboBox.DataSource = this.selectedItems;
    this.comboBox.ValueMember = "Value";
    this.comboBox.DisplayMember = "Text";
    this.Refresh();
}



選択肢を変える必要が生じた場合に、新しい候補が this.selectedItems にセット
されて、イベントが発生する仕組みなんですが。
ちなみに「this.comboBox.DataSource = this.selectedItems;」でブレークポイン
トを設定するとイベントは発生しており、this.comboBoxDataSource には新しいデ
ータが格納されていることは間違いないのです。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-17 17:45
コード:

private void selectedItems_Changed(object sender, EventArgs e) {
this.comboBox.DataSource = this.selectedItems;
this.comboBox.ValueMember = "Value";
this.comboBox.DisplayMember = "Text";
this.comboBox.DataBind();
}


かな?

#編集
あ、失礼。Windows Form ですね。

_________________
囚人@わんくま同盟
囚人のジレンマな日々

[ メッセージ編集済み 編集者: 囚人 編集日時 2006-03-17 17:52 ]
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-03-17 18:16
引用:

囚人さんの書き込み (2006-03-17 17:45) より:

コード:
private void selectedItems_Changed(object sender, EventArgs e) {
    this.comboBox.DataSource = this.selectedItems;
    this.comboBox.ValueMember = "Value";
    this.comboBox.DisplayMember = "Text";
    this.comboBox.DataBind();
}


かな?



DataBind() が conboBox に無いようなんですが。
trapemiya
大ベテラン
会議室デビュー日: 2005/07/30
投稿数: 102
投稿日時: 2006-03-17 18:59
this.selectedItemsが何者かわからないのですが、

this.comboBox.DataSource = null;
this.comboBox.DataSource = this.selectedItems;

みたいにするとうまくいくかもしれません。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-17 19:11
引用:

DataBind() が conboBox に無いようなんですが。


すいません^^;
Web フォームかと思いまして(Web に ComboBox はないですが)

_________________
囚人のジレンマな日々
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-03-17 19:17
引用:

trapemiyaさんの書き込み (2006-03-17 18:59) より:

this.selectedItemsが何者かわからないのですが、



こんな者です。

コード:

public class SelectedItems : List<SelectedItem> {
// ここでイベント発生させたり、List に値を格納している。
}

public class SelectedItem
{
#region Constructor
//**************************************************************************************************
// Constructor
//**************************************************************************************************
public SelectedItem(object value, string text) {
this._value = value;
this._text = text;
}

#endregion

#region Value Property
//**************************************************************************************************
// Value Property
//**************************************************************************************************
private object _value;

public object Value {
get {
return this._value;
}
}

#endregion

#region Text Property
//**************************************************************************************************
// Text Property
//**************************************************************************************************
private string _text;

public string Text {
get {
return this._text;
}
}

#endregion

#region ToString Method(Overrides)
//**************************************************************************************************
// ToString Method(Overrides)
//**************************************************************************************************
public override string ToString() {
return this.Text;
}

#endregion
}



引用:

trapemiyaさんの書き込み (2006-03-17 18:59) より:

this.comboBox.DataSource = null;
this.comboBox.DataSource = this.selectedItems;

みたいにするとうまくいくかもしれません。



駄目でした orz
[ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-03-17 19:18 ]

#訂正です。

うまくいきました!
ありがとうございました。

[ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-03-17 19:38 ]

スキルアップ/キャリアアップ(JOB@IT)