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

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

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

Re[7]: データ連結したコンボボックスについて


(過去ログ 95 を表示中)

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

■56979 / inTopicNo.1)  データ連結したコンボボックスについて
  
□投稿者/ ひろふと (3回)-(2011/02/08(Tue) 11:11:11)

分類:[.NET 全般] 

いつもお世話になっています。

現在、SQL ServerとC#を使用して、データセットのテーブルをバインディングソースでコンボボックスと連結していますが、1つは、テーブルのキー列、もう1つはテーブルの名前列をそれぞれ連結しており、
どちらか一方のリスト項目を変更すると、もう一方がそれに対応して変更する動きとなっています。

その際に、初期表示で、両方のコンボボックスの表示を空白にするため、SelectIndexに-1を設定した状態で、起動しますが、そこで1件目のデータを選択しても、もう一方のコンボボックスの内容が空白のままになっていまします。2件目以降を選択すると、両方の内容が正しく表示されます。

調べてみても、バインディングソースのPositionの値は0になっているので表示されるとは思うのですが・・・・・

文章力に乏しく、伝えたいことが伝わっているか不安ではありますが、教えていただけないでしょうか。
引用返信 編集キー/
■56982 / inTopicNo.2)  Re[1]: データ連結したコンボボックスについて
□投稿者/ マサヤ (246回)-(2011/02/08(Tue) 11:31:02)
問題になっている仕様は下記のソースでような感じいいでしょうか?
試してみましたが動きましたよ。

public Form1()
{
     InitializeComponent();
     SetComboBox();
     comboBox1.SelectedIndex = -1;
     comboBox2.SelectedIndex = -1;
}

private void SetComboBox()
{
     IList<String> list = new List<String>();
     list.Add("hoge");
     list.Add("hoge2");
     list.Add("hoge3");
     comboBox1.DataSource = list;
     IList<String> list2 = new List<String>();
     list2.Add("master");
     list2.Add("master2");
     list2.Add("master3");
     comboBox2.DataSource = list2;
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
     if (comboBox2.DataSource != null)
     {
         comboBox2.SelectedIndex = comboBox1.SelectedIndex;
      }
}

引用返信 編集キー/
■56987 / inTopicNo.3)  Re[2]: データ連結したコンボボックスについて
□投稿者/ ひろふと (4回)-(2011/02/08(Tue) 12:02:13)
No56982 (マサヤ さん) に返信
> 問題になっている仕様は下記のソースでような感じいいでしょうか?
> 試してみましたが動きましたよ。
>
> public Form1()
> {
> InitializeComponent();
> SetComboBox();
> comboBox1.SelectedIndex = -1;
> comboBox2.SelectedIndex = -1;
> }
>
> private void SetComboBox()
> {
> IList<String> list = new List<String>();
> list.Add("hoge");
> list.Add("hoge2");
> list.Add("hoge3");
> comboBox1.DataSource = list;
> IList<String> list2 = new List<String>();
> list2.Add("master");
> list2.Add("master2");
> list2.Add("master3");
> comboBox2.DataSource = list2;
> }
>
> private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
> {
> if (comboBox2.DataSource != null)
> {
> comboBox2.SelectedIndex = comboBox1.SelectedIndex;
> }
> }

マサヤさま。さっそくの回答ありがとうございます。

質問の件ですが、動作および設定としては以下の通りとなります。

Table1というテーブルの列としてCodeとNameがあります。
そしてTable1に以下のように設定します。
Table1[0].Code=0,Table1[0].Name=名前0
Table1[1].Code=1,Table1[1].Name=名前1
Table1[2].Code=2,Table1[2].Name=名前2
Table1[3].Code=3,Table1[3].Name=名前3
Table1[4].Code=4,Table1[4].Name=名前4
Table1[5].Code=5,Table1[5].Name=名前5

そして、Table1をバインディングソースのDataMemberに設定します。

その後、コンボボックス1にTable1のCode列を連結。同じくコンボボックス2にTable1のName列を連結します。

連結後、コンボボックス1と2を空白表示するため、それぞれのSelectIndexに-1を設定します。

そうした状態で、コンボボックス1のリストから0を選択しても、コンボボックス2のリストが名前0にならず空白のままになっています。

コンボボックス1のリストから1を選択した場合は、コンボボックス2のリストは空白から名前1に変更となります。

以上のような動作になっています。
引用返信 編集キー/
■56988 / inTopicNo.4)  Re[3]: データ連結したコンボボックスについて
□投稿者/ マサヤ (248回)-(2011/02/08(Tue) 12:19:48)
ひろふとさんのソースにも
>private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
> {
> if (comboBox2.DataSource != null)
> {
> comboBox2.SelectedIndex = comboBox1.SelectedIndex;
> }
ここにあたるイベントがあると思います。
そこで、それぞれのcomboBoxのSelectedIndexはどうなっていますか?

他の案としては、コンボボックス1では表示をCode、Keyを名前にして、コンボボックス2では表示を名前、KeyをCodeにします。
この場合、同じ名前が存在すると。。。
引用返信 編集キー/
■56990 / inTopicNo.5)  Re[4]: データ連結したコンボボックスについて
□投稿者/ ひろふと (5回)-(2011/02/08(Tue) 13:02:16)
No56988 (マサヤ さん) に返信
> ひろふとさんのソースにも
> >private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
>>{
>>if (comboBox2.DataSource != null)
>>{
>>comboBox2.SelectedIndex = comboBox1.SelectedIndex;
>>}
> ここにあたるイベントがあると思います。
> そこで、それぞれのcomboBoxのSelectedIndexはどうなっていますか?
>
> 他の案としては、コンボボックス1では表示をCode、Keyを名前にして、コンボボックス2では表示を名前、KeyをCodeにします。
> この場合、同じ名前が存在すると。。。

マサヤさま。回答ありがとうございます。

2つのコンボボックスの同期については、バインディングソースのPositionプロパティを使用しているため、SelectedIndexChangedイベントは利用していません。
もしかすれば、Positionが0のときに、SelectedIndexを-1から0に変えてもPositionに変更がないため、表示が空白のままになるのが関係あるかもしれませんが・・・・・
引用返信 編集キー/
■56991 / inTopicNo.6)  Re[5]: データ連結したコンボボックスについて
□投稿者/ shu (415回)-(2011/02/08(Tue) 13:24:38)
No56990 (ひろふと さん) に返信

空行を先頭に追加してみてはどうでしょう?
引用返信 編集キー/
■56993 / inTopicNo.7)  Re[6]: データ連結したコンボボックスについて
□投稿者/ ひろふと (6回)-(2011/02/08(Tue) 13:35:49)
No56991 (shu さん) に返信
> ■No56990 (ひろふと さん) に返信
>
> 空行を先頭に追加してみてはどうでしょう?

shuさま。回答ありがとうございます。

回答の件についてですが、質問をする前に確認しており、コンボボックスのドロップダウンをした際に、空白行があるのは見栄えとしてどうかという思いになっていました。
やはりドロップダウンで選択する場合は、データ行から始まりたいなという思いがありましたもので・・・・・
引用返信 編集キー/
■56994 / inTopicNo.8)  Re[7]: データ連結したコンボボックスについて
□投稿者/ ひろふと (7回)-(2011/02/08(Tue) 13:43:48)
マサヤさま、shuさま。

数々のアドバイスありがとうございました。

よくよく考えてみましたが、バインディングソースで連結していても、Filterなどの処理も行わない項目となっていますので、バインディングソースをやめ、テーブルと直接連結するようにし、どちらかのSelectIndexが変更された場合は、もう一方のSelectIndexに設定するような処理に変更しました。
マサヤさまからアドバイスしていただいた方法です。

現状、こちらの方法で問題なく動作しておりますので、解決ということにいたします。

たくさんのアドバイスありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -