- PR -

DropDownListでのデータの取得について

投稿者投稿内容
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-10-08 18:54
ぼのぼのです。
DataViewのRowFilterを使う方法はいかがでしょう?

コード:

区分1	区分2
----------------------
肉	鳥
肉	牛
肉	豚
魚	鯵
魚	秋刀魚
魚	鮭
果物	人参
果物	南瓜
果物	茄子
:	:


こんなイメージのDataTableがあるとします。
これを、初回ロード時にSessionにしまっておきます。
で、例えば区分1で魚が選択されたら、

コード:

Dim table As DataTable = Session("しまっとく時に使ったキー")
Dim view As DataView = table.DefaultView
view.RowFilter = "区分1 = '魚'"


みたいな感じでRowFilterを設定したDataViewを区分2のDropDownListの
DataSourceにしてやればうまくいくと思います。
z2
会議室デビュー日: 2005/08/23
投稿数: 19
投稿日時: 2005-10-12 11:03
ぼのぼの様返信ありがとうございます

sessionにdatatableを格納する方法がちょっとわからないのですが

If Not IsPostBack Then
Dim Conn As SqlConnection = データベースに接続
Conn.Open()
Dim cmd As New SqlCommand("select * FROM DataTable", Conn)
Dim dr As SqlDataReader = cmd.ExecuteReader
(ここまであってるのかな?)
・・・
End If

テーブルを作成する場合は
Dim Conn As SqlConnection = データベースに接続
Conn.Open()
If DropDownList区分1.SelectedValue = "肉" Then
Dim cmd As New SqlCommand("select * FROM DataTable where 区分1='肉'", Conn)
Dim dr As SqlDataReader = cmd.ExecuteReader
DropDownList区分2.DataSource = dr
DropDownList区分2.DataTextField = "区分2"
DropDownList区分2.DataValueField = "区分2"
DropDownList区分2.DataBind()
dr.Close()
End If
If DropDownList区分1.SelectedValue = "魚" Then
・・・(魚の場合)
End If
If DropDownList区分1.SelectedValue = "野菜" Then
・・・(野菜の場合)
End If

みたいな感じでもできると思うのですが、テーブルを作成せずに区分2を制御したいのです
テーブル作成する場合はぼのぼの様のやり方でsessionに格納したほうがいいと思うのですが

If DropDownList区分1.SelectedValue = "野菜" Then
(ここを固定値(人参・南瓜・茄子など)の中から選択させ返すようにしたい
テーブルを作成せずにプログラムで判断させたいのです)
End If
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-10-12 15:39
あ、ひょっとしてDropDownListの値を直接変えたいってことですか?
それなら
DropDownList2.Items.Clear()
した後
DropDownList2.Items.Add("林檎")
表示内容とvalueを別にしたい場合は
DropDownList2.Items.Add(New ListItem("林檎", "apple"))
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-10-12 16:19
引用:

sessionにdatatableを格納する方法がちょっとわからないのですが



既出です。

引用:

If Not IsPostBack Then
Dim Conn As SqlConnection = データベースに接続
Conn.Open()
Dim cmd As New SqlCommand("select * FROM DataTable", Conn)
Dim dr As SqlDataReader = cmd.ExecuteReader
(ここまであってるのかな?)
・・・
End If



DataTableに読み込むなら、SqlDataReaderではなくSqlDataAdapter(のFillメソッド)を使います。

z2
会議室デビュー日: 2005/08/23
投稿数: 19
投稿日時: 2005-10-12 19:12
ぼのぼの様返信ありがとうございました
クリアして追加するですね、参考になりました

todo様

Dim ds As DataTable
If Not IsPostBack Then
Dim Conn As SqlConnection = データベースに接続
Conn.Open()
Dim cmd As New SqlCommand("select * FROM DataTable", Conn)
Dim dr As SqlDataAdapter
dr.Fill(ds)
Session.Item("DataTable") = cmd.Fill(ds)
・・・
End If

こんな感じになるのでしょうか?
ネット等のサンプルを見ながらやっているのですが、上記のコードではエラーがでます
cedar
会議室デビュー日: 2005/09/13
投稿数: 10
投稿日時: 2005-10-12 21:13
引用:

z2さんの書き込み (2005-10-12 19:12) より:

Dim ds As DataTable
If Not IsPostBack Then
Dim Conn As SqlConnection = データベースに接続
Conn.Open()
Dim cmd As New SqlCommand("select * FROM DataTable", Conn)
Dim dr As SqlDataAdapter
dr.Fill(ds)
Session.Item("DataTable") = cmd.Fill(ds)
・・・
End If

こんな感じになるのでしょうか?
ネット等のサンプルを見ながらやっているのですが、上記のコードではエラーがでます



ええと、何処でエラーになるのか。
また、エラーコードは書いた方がいいのでは^^;

で、本題
1、DataTable SqlDataAdapterにNewが抜けてます
2、sqldataadapterに sqlcommandをセットしていないように見受けられます。





ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-10-12 21:17
エラーとは関係無いんですが…
引用:

Dim ds As DataTable


Fill()メソッドは、引数にDataSetも使用できます。
変数名がdsだとDataSetかと思ってしまうので、変えた方がいいです。

#細かいことですいません…
z2
会議室デビュー日: 2005/08/23
投稿数: 19
投稿日時: 2005-10-14 11:31
返信遅くなりすみません

ほのぼの様ご忠告ありがとうございます

cedar様
If IsPostBack Then
Dim dt As DataTable
Dim Conn As SqlConnection = データベースに接続
Dim adapter As SqlDataAdapter = New SqlDataAdapter("select * FROM DataTable", Conn)
Conn.Open()
adapter.Fill(dt)
Session.Item("DataTable") = adapter.Fill(dt)
Conn.Close()
End If

上記のコードでsessionにdatatableを格納できていると思うのですが
引用:

Dim table As DataTable = Session("しまっとく時に使ったキー")
Dim view As DataView = table.DefaultView
view.RowFilter = "区分1 = '魚'"


Dim view As DataView = table.DefaultView のところで
「オブジェクト参照がオブジェクト インスタンスに設定されていません。」
とメッセージが出てきます。

スキルアップ/キャリアアップ(JOB@IT)