■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 の値 のようになります。
# 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 の呼び出しは不要です。
- Child Tree -