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

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

C# と VB.NET の入門サイト

C# コンボボックス DB取得した値を初期値セットしたい

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■90564 / inTopicNo.1)  C# コンボボックス DB取得した値を初期値セットしたい
  
□投稿者/ kanata (1回)-(2019/03/21(Thu) 22:57:38)

分類:[C#] 

2019/03/22(Fri) 11:58:20 編集(投稿者)
2019/03/22(Fri) 11:53:46 編集(投稿者)

初めまして。
kanataと申します。

C# WindowForm コンボボックスにて質問させてください。

現在、画面@→画面A間で、
DBやり取りのプログラムを作成しています。

画面Aのコンボボックスに表示する値は、
DBからDatatableを利用し取得しています。

画面Aコンボボックスに、画面@の値を初期表示したいのですが、
Datatableの先頭の文字列が表示されてしまいます。

以下処理で、画面@から画面Aに値の受け渡しはできており、
ComboBox_A.Textに値をセットできていることはデバッグで確認済です。

public Form_A(hoge hogehoge)
{
  InitializeComponent();


  // DBから値の取得・セット

  ComboBox_A.DataSource = dataTable_Aを取得する処理(メソッド);
  ComboBox_A.DisplayMember = "AAA";
  ComboBox_A.ValueMember = "aaa";

  // 画面@の情報を持ったhogehogeインスタンスから値をセット
  ComboBox_A.Text = hogehoge.text;
}

開発環境、使用言語、開発者LV:Windows10 Home/VS2017、.NETC#、ビギナー

お手数おかけしますが、
宜しくお願い致します。
引用返信 編集キー/
■90572 / inTopicNo.2)  Re[1]: C# コンボボックス DB取得した値を初期値セットしたい
□投稿者/ 魔界の仮面弁士 (2121回)-(2019/03/22(Fri) 09:26:21)
No90564 (kanata さん) に返信
> 画面@の値を画面Aのコンボボックスに
> 初期表示する方法を教えてください。

初期表示したい値を、他方のフォームに渡せば OK。


たとえば「Form1 の textBox1.Text」を「MessageBox」に表示させたい場合、
textBox1.Text から得られる文字列を MessageBox の Show メソッドの引数に渡しますよね。


「OpenFileDialog で選択されたファイル名」を、「自フォームの label1」に表示させたい場合、
this.label1.Text に対して、opneFileDialog1 の FileName プロパティ値を渡しますよね。



「Form1 で表示されている値」を「Form2 の ComboBox_A」に渡す場合も同じことです。
Form2 側に、public な引数付きメソッドを自作し、
それを Form1 から呼び出して、Form1 のデータをその引数に渡すようにします。
Form2 側は、そうして受け取ったデータを、自身の ComboBox_A に反映させれば OK。

※メソッド引数の代わりにコンストラクタ引数を使っても良いですし、
 メソッドではなくプロパティを実装するという手もあります。

https://www.atmarkit.co.jp/fdotnet/chushin/introwinform_07/introwinform_07_02.html
http://dobon.net/vb/dotnet/form/accessanotherformdata.html
http://blogs.wankuma.com/episteme/archive/2009/09/01/180721.aspx

引用返信 編集キー/
■90577 / inTopicNo.3)  Re[1]: C# コンボボックス DB取得した値を初期値セットしたい
□投稿者/ WebSurfer (1797回)-(2019/03/22(Fri) 11:38:36)
No90564 (kanata さん) に返信

画面@から画面Aへ文字列が渡せれば問題解決ということであれば以下はスルーして
ください。( No90572 の魔界の仮面弁士さんのレスを見てください)


そうでなければ、以下につき返答ください。

Windows Forms アプリの話ですよね?(ComboBox というのは WPF にもあります)

> ComboBox_A.DataSource = dataTable_A;
> ComboBox_KindName_Update.DisplayMember = "AAA";
> ComboBox_KindName_Update.ValueMember = "aaa";
>
> ComboBox_A.Text = 画面@のインスタンス.Text;

ComboBox_A と ComboBox_KindName_Update という 2 つの ComboBox があるように見え
ますが、そうだとすると、どういう話なのか、2 つの ComboBoxに対してどういう操作を
したいのかが分かりません。説明してください。

> 初期表示する方法を教えてください。

単なる書き間違いで、実際は単一の ComboBox だとして、「初期表示」というのは DataTable
の AAA 列のどれかを ComboBox.Text プロパティに設定したいということだと理解しています
が、それが「画面@のインスタンス.Text」で良いということでしょうか?

(「画面@のインスタンス.Text」は必ず DataTable の AAA 列のどれかになるので回答者は
気にしなくて良い? もしくは違う任意の文字列でも良い?)


引用返信 編集キー/
■90578 / inTopicNo.4)  Re[2]: C# コンボボックス DB取得した値を初期値セットしたい
□投稿者/ kanata (2回)-(2019/03/22(Fri) 11:49:05)
No90572 (魔界の仮面弁士 さん) に返信
> ■No90564 (kanata さん) に返信
>>画面@の値を画面Aのコンボボックスに
>>初期表示する方法を教えてください。
>
> 初期表示したい値を、他方のフォームに渡せば OK。
>
>
> たとえば「Form1 の textBox1.Text」を「MessageBox」に表示させたい場合、
> textBox1.Text から得られる文字列を MessageBox の Show メソッドの引数に渡しますよね。
>
>
> 「OpenFileDialog で選択されたファイル名」を、「自フォームの label1」に表示させたい場合、
> this.label1.Text に対して、opneFileDialog1 の FileName プロパティ値を渡しますよね。
>
>
>
> 「Form1 で表示されている値」を「Form2 の ComboBox_A」に渡す場合も同じことです。
> Form2 側に、public な引数付きメソッドを自作し、
> それを Form1 から呼び出して、Form1 のデータをその引数に渡すようにします。
> Form2 側は、そうして受け取ったデータを、自身の ComboBox_A に反映させれば OK。
>
> ※メソッド引数の代わりにコンストラクタ引数を使っても良いですし、
>  メソッドではなくプロパティを実装するという手もあります。
>
> https://www.atmarkit.co.jp/fdotnet/chushin/introwinform_07/introwinform_07_02.html
> http://dobon.net/vb/dotnet/form/accessanotherformdata.html
> http://blogs.wankuma.com/episteme/archive/2009/09/01/180721.aspx
>

魔界の仮面弁士 様

お世話になっております。
少々質問に問題がありましたので、再度修正させていただきました。

画面Aには画面@の情報を受け渡しできているが、
画面Aのコンボボックスに初期表示できないことが問題となっております。

DBから取得したDatatableの0列目を表示してしまい、
画面@の値が初期表示されないことが課題となっております。
引用返信 編集キー/
■90579 / inTopicNo.5)  Re[2]: C# コンボボックス DB取得した値を初期値セットしたい
□投稿者/ kanata (3回)-(2019/03/22(Fri) 11:52:01)
2019/03/22(Fri) 11:57:12 編集(投稿者)
2019/03/22(Fri) 11:55:36 編集(投稿者)

No90577 (WebSurfer さん) に返信
> ■No90564 (kanata さん) に返信
>
> 画面@から画面Aへ文字列が渡せれば問題解決ということであれば以下はスルーして
> ください。( No90572 の魔界の仮面弁士さんのレスを見てください)
>
>
> そうでなければ、以下につき返答ください。
>
> Windows Forms アプリの話ですよね?(ComboBox というのは WPF にもあります)
>
>>ComboBox_A.DataSource = dataTable_A;
>>ComboBox_KindName_Update.DisplayMember = "AAA";
>>ComboBox_KindName_Update.ValueMember = "aaa";
>>
>>ComboBox_A.Text = 画面@のインスタンス.Text;
>
> ComboBox_A と ComboBox_KindName_Update という 2 つの ComboBox があるように見え
> ますが、そうだとすると、どういう話なのか、2 つの ComboBoxに対してどういう操作を
> したいのかが分かりません。説明してください。
>
>>初期表示する方法を教えてください。
>
> 単なる書き間違いで、実際は単一の ComboBox だとして、「初期表示」というのは DataTable
> の AAA 列のどれかを ComboBox.Text プロパティに設定したいということだと理解しています
> が、それが「画面@のインスタンス.Text」で良いということでしょうか?
>
> (「画面@のインスタンス.Text」は必ず DataTable の AAA 列のどれかになるので回答者は
> 気にしなくて良い? もしくは違う任意の文字列でも良い?)
>
>

WebSurfer 様

お世話になっております。
Windows Forms アプリの質問になります。
失礼いたしました質問の仕方が非常に悪かったです。
画面間は関係なく、ご想像の通り、コンボボックス初期値の問題です。

画面間のデータ受け渡しではなく、
コンボボックスの初期表示が問題です。
(DBのDatatableのゼロ列の値を表示してしまう)

また、初期表示したい値は、必ず DataTable の AAA 列のどれかになっています。

お手数おかけしますが、ご助言ください。
引用返信 編集キー/
■90580 / inTopicNo.6)  Re[3]: C# コンボボックス DB取得した値を初期値セットしたい
□投稿者/ WebSurfer (1798回)-(2019/03/22(Fri) 12:08:07)
No90579 (kanata さん) に返信

> コンボボックスの初期表示が問題です。
> (DBのDatatableのゼロ列の値を表示してしまう)
>
> また、初期表示したい値は、必ず DataTable の AAA 列のどれかになっています。

ComboBox_A.Text = hogehoge.text; あたりにブレークポイントを置いて、デバッガを使って
ステップ実行させ、hogehoge.text の文字列を調べて見てはいかがですか? 

「ゼロ列の値」になっていませんか?(つまり、動作としては正しく、実際に渡した値が期待
するものと違うということはありませんか?)
引用返信 編集キー/
■90581 / inTopicNo.7)  Re[4]: C# コンボボックス DB取得した値を初期値セットしたい
□投稿者/ kanata (4回)-(2019/03/22(Fri) 12:14:09)
No90580 (WebSurfer さん) に返信
> ■No90579 (kanata さん) に返信
>
>>コンボボックスの初期表示が問題です。
>>(DBのDatatableのゼロ列の値を表示してしまう)
>>
>>また、初期表示したい値は、必ず DataTable の AAA 列のどれかになっています。
>
> ComboBox_A.Text = hogehoge.text; あたりにブレークポイントを置いて、デバッガを使って
> ステップ実行させ、hogehoge.text の文字列を調べて見てはいかがですか? 
>
> 「ゼロ列の値」になっていませんか?(つまり、動作としては正しく、実際に渡した値が期待
> するものと違うということはありませんか?)

WebSurfer 様

デバッグで確認はしており、期待する値(≠ゼロ列の値)となっています。
また、それ以降再度更新するタイミングもありません。
引用返信 編集キー/
■90582 / inTopicNo.8)  Re[3]: C# コンボボックス DB取得した値を初期値セットしたい
□投稿者/ 魔界の仮面弁士 (2123回)-(2019/03/22(Fri) 12:22:31)
No90578 (kanata さん) に返信
> 画面Aには画面@の情報を受け渡しできているが、
> 画面Aのコンボボックスに初期表示できないことが問題となっております。

ValueMember を設定しているのであれば、
Text ではなく SelectedValue を使うべきでは? (あるいは SelectedIndex)


public Form1()
{
 InitializeComponent();

 var dic = new Dictionary<int, string> { { 10, "ああ" }, { 20, "いい" }, { 30, "うう" }, { 40, "いい" } };
 comboBox1.DataSource = dic.ToArray();
 comboBox1.DisplayMember = "Value";
 comboBox1.ValueMember = "Key";
 comboBox1.Text = "いい";
 //comboBox1.SelectedValue = 40;
}


> DBから取得したDatatableの0列目を表示してしまい、
先頭行ではなく先頭列なのですね。
データそのものに問題があるのでは…?
引用返信 編集キー/
■90584 / inTopicNo.9)  Re[4]: C# コンボボックス DB取得した値を初期値セットしたい
□投稿者/ kanata (5回)-(2019/03/22(Fri) 12:47:56)
2019/03/22(Fri) 12:52:06 編集(投稿者)
2019/03/22(Fri) 12:48:27 編集(投稿者)

No90582 (魔界の仮面弁士 さん) に返信
> ■No90578 (kanata さん) に返信
>>画面Aには画面@の情報を受け渡しできているが、
>>画面Aのコンボボックスに初期表示できないことが問題となっております。
>
> ValueMember を設定しているのであれば、
> Text ではなく SelectedValue を使うべきでは? (あるいは SelectedIndex)
>
>
> public Form1()
> {
>  InitializeComponent();
>
>  var dic = new Dictionary<int, string> { { 10, "ああ" }, { 20, "いい" }, { 30, "うう" }, { 40, "いい" } };
>  comboBox1.DataSource = dic.ToArray();
>  comboBox1.DisplayMember = "Value";
>  comboBox1.ValueMember = "Key";
>  comboBox1.Text = "いい";
>  //comboBox1.SelectedValue = 40;
> }
>
>
>>DBから取得したDatatableの0列目を表示してしまい、
> 先頭行ではなく先頭列なのですね。
> データそのものに問題があるのでは…?

魔界の仮面弁士 様

行ですね、失礼しました…
SelectedValueを利用すれば期待する結果が得られそうです。
また、comboBox1.Textで期待した結果が得られなかった理由は、
SQLでトリムしているかどうかによる、半角スペースの差でした。

ありがとうございました。クローズとさせていただきます。

解決済み
引用返信 編集キー/
■90585 / inTopicNo.10)  Re[5]: C# コンボボックス DB取得した値を初期値セットしたい
□投稿者/ WebSurfer (1799回)-(2019/03/22(Fri) 12:51:18)
No90581 (kanata さん) に返信
>
> デバッグで確認はしており、期待する値(≠ゼロ列の値)となっています。
> また、それ以降再度更新するタイミングもありません。

実際に試してみましたが再現しません。Text に設定した項目になります。
もう少し調べてみますが、今時間が無いのでしばしお待ちください。
引用返信 編集キー/
■90586 / inTopicNo.11)  Re[6]: C# コンボボックス DB取得した値を初期値セットしたい
□投稿者/ kanata (6回)-(2019/03/22(Fri) 12:53:33)
No90585 (WebSurfer さん) に返信
> ■No90581 (kanata さん) に返信
>>
>>デバッグで確認はしており、期待する値(≠ゼロ列の値)となっています。
>>また、それ以降再度更新するタイミングもありません。
>
> 実際に試してみましたが再現しません。Text に設定した項目になります。
> もう少し調べてみますが、今時間が無いのでしばしお待ちください。

WebSurfer 様

こちらの実装誤りでした。
原因はSQLのトリム有無による、半角スペースの存在有無による差異でした。
お手数お隠しまして、大変失礼いたしました。
引用返信 編集キー/
■90587 / inTopicNo.12)  Re[7]: C# コンボボックス DB取得した値を初期値セットしたい
□投稿者/ kanata (7回)-(2019/03/22(Fri) 12:53:46)
No90586 (kanata さん) に返信
> ■No90585 (WebSurfer さん) に返信
>>■No90581 (kanata さん) に返信
> >>
> >>デバッグで確認はしており、期待する値(≠ゼロ列の値)となっています。
> >>また、それ以降再度更新するタイミングもありません。
>>
>>実際に試してみましたが再現しません。Text に設定した項目になります。
>>もう少し調べてみますが、今時間が無いのでしばしお待ちください。
>
> WebSurfer 様
>
> こちらの実装誤りでした。
> 原因はSQLのトリム有無による、半角スペースの存在有無による差異でした。
> お手数お隠しまして、大変失礼いたしました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ