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

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

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

Re[6]: COMBOBOXの連動について(追加)


(過去ログ 112 を表示中)

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

■66609 / inTopicNo.1)  COMBOBOXの連動について
  
□投稿者/ まさ (1回)-(2013/05/11(Sat) 00:31:03)

分類:[.NET 全般] 

VB.NETで開発を行っています。
SQLサーバー内のテーブルを使って、2つあるCOMBOBOX内に連動したものを作りたいのですが
取っ掛かり自体がわからなくて困っています。下記のように表示させるにはどうしたらよいのでしょうか?

<SQLのデーブル>
分類A   分類A名    分類B   分類B名
1      りんご      11     ふじ
1      りんご      12     むつ
1      りんご      13     ジョナ
2      みかん      21    オレンジ
2      みかん      22    伊予かん


COMBOBOX1で「りんご」を選んだときには分類Aの「1」に属するものだけを
COMBOBOX2に表示させる

<表示イメージ>
COMBOBOX1     COMBOBOX2
りんご           ふじ
               むつ
               ジョナ

現在の状況は、SQLサーバーには接続できていて、COMBOBOX1には分類Aが
COMBOBOX2には分類Bがすべて表示されている状態です。
(COMBOBOX1で「りんご」を選んでも「オレンジ」や「伊予かん」が表示されている
状態です。)

よろしくお願いします。

引用返信 編集キー/
■66610 / inTopicNo.2)  Re[1]: COMBOBOXの連動について
□投稿者/ クエスト (1回)-(2013/05/11(Sat) 07:29:38)
VBのバージョンが何であるか、
Formアプリケーションなのかasp.netなのか、
SQL Serverのデータをどのようにコンボボックスに割り当てているのか、
によっても回答はずいぶん違ってきます。

現状のデータのコンボボックスの割り当てをどのように行っているかが分かるような
コードを提示した方が相手は分かりやすいと思います。
引用返信 編集キー/
■66611 / inTopicNo.3)  Re[2]: COMBOBOXの連動について
□投稿者/ まさ (2回)-(2013/05/11(Sat) 11:08:32)
お世話になります。不足がありまして申し訳ありません。

VBはVisual Studio 2010です。
SQLはSQL Server 2012 です。
Formを使って作成しています。

ソースは以下のように作成しています。

        Dim dSet As DataSet = New DataSet("分類A")
        Dim dSet2 As DataSet = New DataSet("分類B")
        Dim dAdp As SqlClient.SqlDataAdapter
        Dim dAdp2 As SqlClient.SqlDataAdapter
        Dim scn As New SqlClient.SqlConnection("SQLサーバーへの接続パス")

        dAdp = New SqlClient.SqlDataAdapter("select 分類B名 from 分類マスタ", scn)
        dAdp.Fill(dSet, "分類マスタ")
        dAdp2 = New SqlClient.SqlDataAdapter("select distinct 分類A名 from 分類マスタ", scn)
        dAdp2.Fill(dSet2, "分類マスタ")

        cmbCHUNAME.DataSource = dSet.Tables("分類マスタ")
        cmbDAINAME.DataSource = dSet2.Tables("分類マスタ")
        cmbCHUNAME.DisplayMember = "分類B名"
        cmbDAINAME.DisplayMember = "分類A名"
        cmbCHUNAME.SelectedItem = "分類B"
        cmbDAINAME.SelectedItem = "分類A"

以上、よろしくお願いします。


引用返信 編集キー/
■66612 / inTopicNo.4)  Re[1]: COMBOBOXの連動について
□投稿者/ shu (307回)-(2013/05/11(Sat) 11:08:50)
No66609 (まさ さん) に返信

DB読込は出来ている物として
DataTableを用いたサンプルを載せます。
ComboBox,BindingSourceはデザイナで貼りつけてあるものとします。

        Dim tbl1 As New DataTable
        With tbl1.Columns
            .Add("分類A", GetType(Integer))
            .Add("分類A名", GetType(String))
        End With
        Dim tbl2 As New DataTable
        With tbl2.Columns
            .Add("分類A", GetType(Integer))
            .Add("分類B", GetType(Integer))
            .Add("分類B名", GetType(String))
        End With

        With tbl1.Rows
            .Add(1, "りんご")
            .Add(2, "みかん")
        End With

        With tbl2.Rows
            .Add(1, 11, "ふじ")
            .Add(1, 12, "むつ")
            .Add(1, 13, "ジョナ")
            .Add(2, 21, "オレンジ")
            .Add(2, 22, "伊予かん")
        End With

        BindingSource1.DataSource = tbl1
        ComboBox1.DataSource = BindingSource1
        ComboBox1.ValueMember = "分類A"
        ComboBox1.DisplayMember = "分類A名"

        BindingSource2.DataSource = tbl2
        BindingSource2.Filter = "1=0"
        ComboBox2.DataSource = BindingSource2
        ComboBox2.ValueMember = "分類B"
        ComboBox2.DisplayMember = "分類B名"




    Private Sub ComboBox1_SelectedValueChanged(sender As Object, e As System.EventArgs) Handles ComboBox1.SelectedValueChanged
        BindingSource2.Filter = String.Format("分類A = {0}", ComboBox1.SelectedValue)
    End Sub

引用返信 編集キー/
■66618 / inTopicNo.5)  Re[2]: COMBOBOXの連動について
□投稿者/ まさ (3回)-(2013/05/11(Sat) 21:47:14)
No66612 (shu さん) に返信


shu様、大変、ありがとうございます。とても助かります。

まだ、VBを初めて1ヶ月くらいなので、わからないことも多いのですが、
下記の分類に関する情報を直接プログラムに書き込むのではなく、
SQLサーバーのテーブル内からもってくるようにしたいのです。

>         With tbl1.Rows
>             .Add(1, "りんご")
>             .Add(2, "みかん")
>         End With
> 
>         With tbl2.Rows
>             .Add(1, 11, "ふじ")
>             .Add(1, 12, "むつ")
>             .Add(1, 13, "ジョナ")
>             .Add(2, 21, "オレンジ")
>             .Add(2, 22, "伊予かん")
>         End With

このようなときはどうすればよいのでしょうか?
大変申し訳ありませんが、よろしくお願いします。


引用返信 編集キー/
■66620 / inTopicNo.6)  Re[3]: COMBOBOXの連動について
□投稿者/ shu (309回)-(2013/05/11(Sat) 22:28:43)
No66618 (まさ さん) に返信
> ■No66612 (shu さん) に返信
>
>
> shu様、大変、ありがとうございます。とても助かります。
>
> まだ、VBを初めて1ヶ月くらいなので、わからないことも多いのですが、
> 下記の分類に関する情報を直接プログラムに書き込むのではなく、
> SQLサーバーのテーブル内からもってくるようにしたいのです。
>
>> With tbl1.Rows
>> .Add(1, "りんご")
>> .Add(2, "みかん")
>> End With
>>
>> With tbl2.Rows
>> .Add(1, 11, "ふじ")
>> .Add(1, 12, "むつ")
>> .Add(1, 13, "ジョナ")
>> .Add(2, 21, "オレンジ")
>> .Add(2, 22, "伊予かん")
>> End With
>
> このようなときはどうすればよいのでしょうか?
> 大変申し訳ありませんが、よろしくお願いします。
DBから読み込む部分の考え方はだいたいNo66611
提示された手順で良いのですがdSet,dSet2へ取得する項目が
足りていません。
ComboBox1へ設定する方が分類A,分類A名
ComboBox2へ設定する方が分類A,分類B,分類B名
でないとダメです。そのように取得すれば私が提示した内容で
いけそうだと思います。Fillに対しDatasetをNewして渡していますがDataTableをNewして
渡すことも出来ますのでこのような場合はDataTableを渡された方がシンプルになります。
引用返信 編集キー/
■66621 / inTopicNo.7)  Re[4]: COMBOBOXの連動について(追加)
□投稿者/ まさ (4回)-(2013/05/11(Sat) 23:26:15)
2013/05/12(Sun) 08:55:00 編集(投稿者)

>>■No66612 (shu さん) に返信

shu様、なんとか作成することができました。
ありがとうございました。

また何かありましたらよろしくお願いします。

あとプログラムの起動時にCOMBOBOX1に「分類A」の名前が表示されているのを消す方法はどうしたらよいのでしょうか?







解決済み
引用返信 編集キー/
■66637 / inTopicNo.8)  Re[5]: COMBOBOXの連動について(追加)
□投稿者/ shu (310回)-(2013/05/13(Mon) 07:51:07)
No66621 (まさ さん) に返信

> あとプログラムの起動時にCOMBOBOX1に「分類A」の名前が表示されているのを消す方法はどうしたらよいのでしょうか?
>
SelectedIndex = -1
とするか
リストに空の項目を用意する。(選択されてないことを表す表記をした方が分かりやすい)

いづれにしても、SelectedValueChangedでの判定が必要になります。

おすすめは後者。一度選択したら初期の状態に戻せなくなるのを防ぐため。

解決済み
引用返信 編集キー/
■66663 / inTopicNo.9)  Re[6]: COMBOBOXの連動について(追加)
□投稿者/ まさ (5回)-(2013/05/14(Tue) 01:57:32)
No66637 (shu さん) に返信
> ■No66621 (まさ さん) に返信
>
shu様、いろいろとありがとうございました。

今回はリストに空をつくることで対応しました。


引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -