C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.57376 の関連記事表示

<< 0 >>
■57376  DataTableの中身をConboBoxに表示したい
□投稿者/ はる -(2011/02/24(Thu) 15:59:45)

    分類:[C#] 

    2011/02/24(Thu) 16:00:41 編集(投稿者)

    こんにちは

    Windows XP
    Visual Studio 2010
    C#
    PostgreSQL
    で開発しています。

    staffというテーブルの
    staff_codeを全てコンボボックスの
    Itemにしたいです。

    class A
    {
    private conbo_set()
    {
    DataTable b_dt;

    B b = new B();
    b_dt = b.GetStaffData();
    }
    }

    class B
    {
    public DataTable GetStaffData()
    {
    string command = "select staff_code from staff ";
    DataSet ds = this.ExecuteSQL(command);
    if ((ds != null) && (ds.Tables[TABLE_NAME].Rows.Count > 0))
    {
    return ds.Tables[TABLE_NAME];
    }
    return null;
    }
    }
    DataTableを上記のように
    メソッドにして
    呼び出し元で取得したDataTableから
    コンボボックスに表示したいのですが
    DataTableの中身の取得の仕方がわかりません…

    b_dt.Tables[TABLE_NAME].Rows[1]["staff_code"].ToString();
    このようにすると、ひとつだけ取得できました。
    これをループで回せば!と思ったのですが、
    終了条件がわかりません…。
    ちなみに、staff_codeはいくつあるかわかりません。
    Lengthとかもなかったのでわからなくて…。

    調べても調べ方が悪いのか
    全くわからなかったので
    わかる方がいらっしゃいましたら
    よろしくお願いいたします。
親記事 /過去ログ96より / 関連記事表示
削除チェック/

■57378  Re[1]: DataTableの中身をConboBoxに表示したい
□投稿者/ 魔界の仮面弁士 -(2011/02/24(Thu) 16:15:00)
    No57376 (はる さん) に返信
    >    private conbo_set()
                   _
    private void combo_set()  ……ではなく?
                   ~
    
    > staffというテーブルの
    > staff_codeを全てコンボボックスの
    > Itemにしたいです。
    
    下記のようにしてみてください。
     comboBox1.DataSource = ds.Tables[テーブル名];
     comboBox1.DisplayMember = "staff_code";  // 画面に表示される項目
     comboBox1.ValueMember = "staff_code";    // comboBox1.SelectedValue で返される項目
    
    この場合、
     comboBox1.Items[番号] → DataRowView 型のオブジェクト
     comboBox1.SelectedItem → DataRowView 型のオブジェクト
     comboBox1.SelectedValue → staff_code の値
    のようになります。
記事No.57376 のレス /過去ログ96より / 関連記事表示
削除チェック/

■57381  Re[2]: DataTableの中身をConboBoxに表示したい
□投稿者/ はる -(2011/02/24(Thu) 16:33:12)
    No57378 (魔界の仮面弁士 さん) に返信
    > ■No57376 (はる さん) に返信
    >> private conbo_set()
    > _
    > private void combo_set() ……ではなく?
    > ~
    すみません記載ミスです;

    >>staffというテーブルの
    >>staff_codeを全てコンボボックスの
    >>Itemにしたいです。
    >
    > 下記のようにしてみてください。
    >  comboBox1.DataSource = ds.Tables[テーブル名];
    >  comboBox1.DisplayMember = "staff_code"; // 画面に表示される項目
    >  comboBox1.ValueMember = "staff_code"; // comboBox1.SelectedValue で返される項目
    >
    > この場合、
    >  comboBox1.Items[番号] → DataRowView 型のオブジェクト
    >  comboBox1.SelectedItem → DataRowView 型のオブジェクト
    >  comboBox1.SelectedValue → staff_code の値
    > のようになります。

    ありがとうございました!
    無事考えているとおりに表示させることができました。

    またなにかあればよろしくお願いいたします。
記事No.57376 のレス / END /過去ログ96より / 関連記事表示
削除チェック/

■57377  Re[1]: DataTableの中身をConboBoxに表示したい
□投稿者/ shu -(2011/02/24(Thu) 16:14:50)
    No57376 (はる さん) に返信

    ComboBoxのDataSourceに取得したDataTableを設定して
    DisplayMemberに"staff_code", ValueMemberにも"staff_code"を
    設定すれば良いかと思います。


    DataTableの行数は DataTable.Rows.Countで取得出来ます。
    またforeachを使用すればCountを取得することなく、全行を処理出来ます。
記事No.57376 のレス /過去ログ96より / 関連記事表示
削除チェック/

■57380  Re[2]: DataTableの中身をConboBoxに表示したい
□投稿者/ はる -(2011/02/24(Thu) 16:31:48)
    No57377 (shu さん) に返信
    > ■No57376 (はる さん) に返信
    >
    > ComboBoxのDataSourceに取得したDataTableを設定して
    > DisplayMemberに"staff_code", ValueMemberにも"staff_code"を
    > 設定すれば良いかと思います。
    >
    >
    > DataTableの行数は DataTable.Rows.Countで取得出来ます。
    > またforeachを使用すればCountを取得することなく、全行を処理出来ます。
    >

    foreachの使い方は知りませんでした…
    まだまだ初心者なので
    勉強しないといけません…

    ありがとうございました!!
記事No.57376 のレス /過去ログ96より / 関連記事表示
削除チェック/

■57383  Re[3]: DataTableの中身をConboBoxに表示したい
□投稿者/ 魔界の仮面弁士 -(2011/02/24(Thu) 16:49:59)
    # shu さんと被った。(^^;
    
    ■No57376 (はる さん) に返信
    > b_dt.Tables[TABLE_NAME].Rows[1]["staff_code"].ToString();
    > このようにすると、ひとつだけ取得できました。
    
    その記述だと、b_dt が DataSet 型であるかのように見えますが、
    
    > DataTable b_dt;
    > B b = new B();
    > b_dt = b.GetStaffData();
    
    こちらでは、b_dt は「DataTable」になっていますね。
    
    
    > これをループで回せば!と思ったのですが、
    > 終了条件がわかりません…。
    > ちなみに、staff_codeはいくつあるかわかりません。
    > Lengthとかもなかったのでわからなくて…。
    
    行数を調べる方法は、既にご存知のはずですよ。
    ご自身で .Rows.Count を用いたコードを書いておられるのですから。
    
    >  if ((ds != null) && (ds.Tables[TABLE_NAME].Rows.Count > 0))
    
    という事は、終了条件が分からないというより、ループ文の書き方そのものが分からなかったという事でしょうか。
    
    
    ■No57380 (はる さん) に返信
    >>DataTableの行数は DataTable.Rows.Countで取得出来ます。
    >>またforeachを使用すればCountを取得することなく、全行を処理出来ます。
    > foreachの使い方は知りませんでした…
    > まだまだ初心者なので
    > 勉強しないといけません…
    
    shu さんが書かれた「foreach」を使う場合は、
        comboBox1.BeginUpdate();
        foreach (DataRow row in b_dt.Rows)
        {
            comboBox1.Items.Add(row["staff_code"]);
        }
        comboBox1.EndUpdate();
    のようにします。b_dt は DataTable です。
    BeginUpdate / EndUpdate の行は無くても動きますが、書いておいた方が処理効率が向上します。
    
    
    「for」を使う場合は、こんな感じです。
        comboBox1.BeginUpdate();
        for (int r = 0; rowIndex < b_dt.Rows.Count; rowIndex++)
        {
            comboBox1.Items.Add(b_dt.Rows[r]["staff_code"]);
        }
        comboBox1.EndUpdate();
    
    
    「while」を使う手もあります。
        comboBox1.BeginUpdate();
        int rowIndex = 0;
        while (rowIndex < b_dt.Rows.Count)
        {
            comboBox1.Items.Add(b_dt.Rows[rowIndex]["staff_code"]);
            rowIndex++;
        }
        comboBox1.EndUpdate();
    
    
    Linq を使って一行で登録する事も出来ます。
       comboBox1.Items.AddRange(b_dt.AsEnumerable().Select(r => r["staff_code"]).ToArray());
    
    .Items.Add を繰り返し使って登録する場合は、BeginUpdate / EndUpdate を呼び出した方が良いですが、
    .Items.AddRange を使って一括登録する場合は、BeginUpdate / EndUpdate の呼び出しは不要です。
記事No.57376 のレス / END /過去ログ96より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -