- PR -

DataSetを用いたComboBoxのアイテム設定

1
投稿者投稿内容
ksk
会議室デビュー日: 2007/10/05
投稿数: 4
投稿日時: 2007-10-05 15:24
お世話になります.

今回C#でDataSetを使用してComboBoxのアイテムとインデックスを表示するプログラムを作成しているのですが,

DataSet data;
ComboBox combo;
// データセットに値入力処理

// Table:コンボボックスに表示したいテーブル名
combo.DataSource = data.Tables["Table"];
// FieldA:コンボボックスに表示したいフィールド名
combo.DisplayMember = "FieldA";
// FieldB:コンボボックスの表示に対応するインデックスが入力されているフィールド名
combo.ValueMember = "FieldB";

というコードを書いてみました.
するとコンボボックスにはTableのレコード数と同じだけの項目が
空白(""のみ)で登録されています.
SQL文を変えてみても同じようにレコード数と同じだけ表示されます.

MessageBoxで確認してみましたが,DataSetには正しい値が入っているようなのですが,
実際にFieldAの値を表示させるにはどうしたらいいのでしょうか
よろしくお願いします.
ダッチ
大ベテラン
会議室デビュー日: 2005/10/31
投稿数: 113
投稿日時: 2007-10-05 16:13
// データセットに値入力処理
この部分でやっていることが重要だと思います。

data.Tables["Table"] には確実に「FieldA」列と「FieldB」列が含まれていますか?
この部分を確認すれば、表示できるようになると思います。
ksk
会議室デビュー日: 2007/10/05
投稿数: 4
投稿日時: 2007-10-05 17:13
ダッチさん,お返事ありがとうございます.

for (int i = 0; i < data.Tables["Table"].Rows.Count; i++)
{
MessageBox.Show(data.Tables["Table"].Rows[i]["FieldA"].ToString());
MessageBox.Show(data.Tables["Table"].Rows[i]["FieldB"].ToString());
}

上記処理であったり,DataSetビジュアライザで見た限り
正しいデータは入っているようなのです.

他に可能性はないでしょうか?
よろしくお願いします.
ta-
会議室デビュー日: 2007/10/02
投稿数: 4
投稿日時: 2007-10-05 17:46
kskさん

私も以前、同じような現象が起こって頭を抱えた事があったのですが
私の場合は、datasetをバインドした後でそのdataを消してしまっていたための
不具合でした。

1データは確かに取得している
2確実にバインドしている

のでしたら、バインドした後、そのデータソースに対して変更とかしていないか
調べてみて下さい。的外れでしたら申し訳ありません。
ksk
会議室デビュー日: 2007/10/05
投稿数: 4
投稿日時: 2007-10-07 01:30
ta-さん
返信遅くなって申し訳ありません.

コンボボックス初期化メソッド中でDataSetをnewしていたので,
もしやと思ってクラスプロパティに持ってみましたが,
結果は同じでした.
DataSetビジュアライザで見る限り,コンボボックス初期化メソッド後も
値に変更はありませんでした.

また,同様の処理で別のフォームではうまく動作しているので,
ますます原因がわからなくなってきました...

なにか思い当たることがございましたらよろしくお延がいします.
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-10-07 09:08
// データセットに値入力処理
にどんな処理をかいてますか?

とりあえず下記のような感じでうごくはずです。
これでダメなら、他の箇所が原因でしょうね。
コード:
DataSet data = new DataSet();

            DataTable dt = new DataTable("Table");
            dt.Columns.Add("FieldA");
            dt.Columns.Add("FieldB");
            DataRow dr1 = dt.NewRow();
            dr1["FieldA"] = "testDisplay1";
            dr1["FieldB"] = "testValue1";
            DataRow dr2 = dt.NewRow();
            dr2["FieldA"] = "testDisplay2";
            dr2["FieldB"] = "testValue2";
            dt.Rows.Add(dr1);
            dt.Rows.Add(dr2);
            data.Tables.Add(dt);

ksk
会議室デビュー日: 2007/10/05
投稿数: 4
投稿日時: 2007-10-12 11:17
皆様お世話になっております.

お返事遅くなって申し訳ありません,
こちらの事情でスレッドがのぞけなかったのですが,
その間にいろいろ試しましたが,
やはり一向にうまくいかなかっため.
(表示はできててもValueメンバーが適応できてなかったりなど)

べる様に指導頂いた部分は動いたのですが,
結局何が悪いのかもわからなかったため.

今現在はコンボボックスをラッピングするクラスを作って
Item.Addと対応関係を保持したArrayListで作成し直しました.

皆さんのご援助をうまく生かせなくて申し訳ありません.
1

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