- PR -

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

投稿者投稿内容
z2
会議室デビュー日: 2005/08/23
投稿数: 19
投稿日時: 2005-09-30 12:58
いつもお世話になっています。

やりたいことのイメージとしてDropDownListを使いデータベースを参照し
社員テーブルのIDをDropDownListに表示させ、IDを選択後Buttonを押すと
社員番号・名前・部署・生年月日等をLabelやTextBoxに表示させたいのです
(TextBoxは部署等の変更の可能性がある場合に更新をかけるためです)

現在のコードは
Private Sub Page_Load〜
If Not IsPostBack Then
Dim myConn As SqlConnection = データベースに接続
Dim myCmd As SqlCommand = New SqlCommand("SELECT * FROM 社員テーブル", myConn)
myConn.Open()
Dim myReader As SqlDataReader = myCmd.ExecuteReader()

AuthorList.DataSource = myReader
AuthorList.DataTextField = "ID"
AuthorList.DataValueField = "名前"
AuthorList.DataBind()

myConn.Close()
myReader.Close()
End If
End Sub

Private Sub Button〜
Dim itemText As String = AuthorList.SelectedItem.Text
Dim itemValue As String = AuthorList.SelectedItem.Value
Label1.Text = itemText
Label2.Text = itemValue
End Sub

上記のコードではIDと名前しか取得できません
AuthorList.DataValueFieldは一つしか取得できないのでしょうか?
よろしく御願いします
Nullぽ
会議室デビュー日: 2005/09/27
投稿数: 13
投稿日時: 2005-09-30 13:53
引用:


Dim myCmd As SqlCommand = New SqlCommand("SELECT * FROM 社員テーブル", myConn)

"SELECT * FROM 社員テーブル"

"SELECT 社員番号 + ';' + 部署 + ';' + 生年月日 AS ListValue, 名前 AS ListItem FROM 社員テーブル"

として〜

AuthorList.DataSource = myReader
AuthorList.DataTextField = "ListItem"
AuthorList.DataValueField = "ListValue"
AuthorList.DataBind()

と変更〜


Private Sub Button〜
Dim itemText As String = AuthorList.SelectedItem.Text
Dim itemValue() As String

itemValue = Split(AuthorList.SelectedItem.Value,";")

Label1.Text = itemText
Label2.Text = itemValue(0) '社員番号
Label3.Text = itemValue(1) '部署
Label4.Text = itemValue(2) '生年月日

End Sub




以上のような対応ではだめでしょうか?
安易過ぎでしょうか?

全て同一のLabelに出力していたので修正^^;;

[ メッセージ編集済み 編集者: Nullぽ 編集日時 2005-09-30 13:54 ]

[ メッセージ編集済み 編集者: Nullぽ 編集日時 2005-09-30 13:59 ]
z2
会議室デビュー日: 2005/08/23
投稿数: 19
投稿日時: 2005-09-30 16:27
Nullぽ様返信ありがとうございます

思うように出来ましたが

"SELECT 社員番号 + ';' + 部署 + ';' + 生年月日 AS ListValue"

上記のコードではデータ型が一致しなければエラーになるみたいですね

"SELECT convert(varchar,社員テーブル.社員番号) + ';' + 部署 AS ListValue"
のようにデータ型を一致させるとできました

本当にありがとうございました
あとボタンを押さずに表示は出来るのでしょうか?
イメージとしてdropdownlistから選択するだけでLabelやTextBoxに表示するように
Nullぽ
会議室デビュー日: 2005/09/27
投稿数: 13
投稿日時: 2005-09-30 17:40
引用:

あとボタンを押さずに表示は出来るのでしょうか?
イメージとしてdropdownlistから選択するだけでLabelやTextBoxに表示するように



サーバ側でポストバック時に処理を行ってもいいのであれば
SelectedIndexChangedイベントで対象コントロールへの
書き込みを行えば良いと思います。
この場合、DropDownListのAutoPostBackをTrueに設定して下さい。


仮にクライアント処理で行いたい場合は、DropDownListの
DropDownList1.Attributes("onchange") = "javascript:〜〜〜"
と〜〜〜の部分に該当処理を記述すればよいと思います。
Nullぽ
会議室デビュー日: 2005/09/27
投稿数: 13
投稿日時: 2005-09-30 17:45
追記いたします。

「+」で結合するデータ内にSplit関数のデリミタ";"が
含まれる場合、結果がもちろんおかしくなります。

「+」の際にはNull値の取扱におご注意ください。

最後に、Value値となる値ですがこの値の中に隠蔽しておきたい
データが含まれる場合は注意が必要です。
(ソースで見えますので。。。)

以上です。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-09-30 21:16
引用:

z2さんの書き込み(2005-09-30 12:58)より:

やりたいことのイメージとしてDropDownListを使いデータベースを参照し
社員テーブルのIDをDropDownListに表示させ、IDを選択後Buttonを押すと
社員番号・名前・部署・生年月日等をLabelやTextBoxに表示させたいのです
(TextBoxは部署等の変更の可能性がある場合に更新をかけるためです)


 んっと、DataTable にしまって、DataBind します。

コード:
Private 社員テーブル As DataTable

Page_Load(...)
	If IsPostBack Then
		社員テーブル = CType(Session("社員テーブル"), DataTable)
	Else
		社員テーブル = DBから読み込んでDataTableを返すメソッド
		Session("社員テーブル") = 社員テーブル
		AuthorList.DataSource = 社員テーブル
		AuthorList.DataValueField = "ID"
		AuthorList.DataTextField= "名前"
		AuthorList.DataBind()
	End If
	...
End Sub

Button_Click(...)
	Dim itemValue As String = AuthorList.SelectedValue
	Dim rows() As DataRow = 社員テーブル.Select("ID='" + itemValue + "'");
	If rows.Length = 0 Then
		おかしいな、見つからないなぁ?の処理
	End If
	Label1.Text = CStr(rows(0)("ID"))
	Label2.Text = CStr(rows(0)("名前"))
	...
End Sub



引用:

あとボタンを押さずに表示は出来るのでしょうか?


DropDownList.AutoPostBack = True
___________________________________________________________________
□ written by Jitta on 2005/09/30
じったのノート
□ Microsoft MVP :Visual Developer ASP/ASP.NET Oct.2004-Sept.2005
_________________
z2
会議室デビュー日: 2005/08/23
投稿数: 19
投稿日時: 2005-10-03 08:25
Nullぽ様、Jitta様返信ありがとうございます
返答遅れてしまってすみません

できました
ありがとうございました
z2
会議室デビュー日: 2005/08/23
投稿数: 19
投稿日時: 2005-10-08 10:27
もう少しDropDownListについて聞きたいのですが

DropDownListが二つあり、IDを区分1、区分2とし
区分1を選択すると区分2で選択できるものを制御する
イメージとして区分1が「肉」「魚」「野菜」
区分1が「肉」選択された場合には区分2には「鳥」「牛」「豚」・・・
区分1が「魚」選択された場合には区分2には「鯵」「秋刀魚」「鮭」・・・
区分1が「果物」選択された場合には区分2には「人参」「南瓜」「茄子」・・・

区分1のAutoPostBackをTrueに設定し区分1、区分2はデータベースを参照せず、
コードから参照する形にしたいのです

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