【ASP.NET コントロール】DropDownList (ドロップダウンリスト)

基本編

値をドロップダウンリストに反映させるには

 * Selectedに値を代入させる

サンプル

Me.DropDownList1.Selected = "C0DE001"

参考資料

http://catseye.cocolog-nifty.com/nekome/2008/09/caspnet-99a6.html

リストを挿入する

 * DropDownList.Items.Insert()を使う

サンプル

Dim defaultList As ListItem = New ListItem("-----", "None")
Me.DropDownList1.Items.Insert(0, defaultList)

値をクリアにする

 * DropDownList.Items.Clear()を使う

サンプル

Me.DropDownList1.Items.Clear()
Me.DropDownList1.DataBind()

参考資料

http://3939deb.seesaa.net/article/108365262.html

ドロップダウンリストについて、あれこれ

【1】未選択用のデフォルト値(「----」)を追加した状態でDBからデータを反映するドロップダウンリストを作成する

ポイント

* バインディングをすると、未選択用のデフォルト値(「----」)が消えてしまうので、ドロップダウンリストのプロパティ「AppendDataBoundItems:True」にする

サンプル:テーブル「Company」をドロップダウンリストに反映する

DB構成

■テーブル「Company」
* Code : vchar(10) / PK
* Name : nvchar(50)

手順

[1] DropDownListを追加する
[2] [1]で追加したDropDownListを選択し、DropDownListの右側の「>」をクリックする
[3] 「データソースの選択」から、<新しいデータソース>を選択し、「データベース」で「OK」押下
[4] DBの接続を選択し「次へ」
[5] ラジオボタン「テーブルまたはビューから列を指定します」を選択した状態で、コンピュータ「Company」を選択
[6] ダイアログ「データソース構成ウィザード」で、以下を選択し、「OK」

 * データソースの選択:Company
 * DropDownListで表示するデータフィールドの選択:Name
 * DropDownListの値のデータフィールドの選択:Code

[7][1]で追加したDropDownListのプロパティを以下を選択する

■コントロール:DropDownList
 * AppendDataBoundItems:True
 * AutoPostBack:True
 * Items
  + Text:----
  + Value:None
  + Selected:True

参考文献

http://www.atmarkit.co.jp/fdotnet/dotnettips/541aspsitemapbind/aspsitemapbind.html

【2】ドロップダウンリストを連携させる

* 例えば、親DropDownList「会社」が決まったら、子DropDownList「支店」の一覧が決まるように、親子関係のあるDropDownListのように、ドロップダウンリストを連携させる

ポイント

* 【1】で使用した「AppendDataBoundItems:True」を使うと、子DropDownListに重複して追加されてしまうことがある
* 「AppendDataBoundItems:True」の代わりに、DataBoundイベントのタイミングで、Items.Insertメソッドでデフォルト値を追加する

サンプル:テーブル「Company/Brunch」を連携したドロップダウンリストを作成

DB構成

■テーブル「Company」
* Code : vchar(10) / PK
* Name : nvchar(50)
■テーブル「Brunch」
* CompanyCode : vchar(10) / PK
* Code : vchar(4) / PK
* Name : nvchar(50)

手順

[1] DropDownListを2つ追加する
[2] 親DropDownListについては、【1】の手順[2]~[6]を参考に追加する
[3] 子DropDownListについては、【1】の手順[2]~[5]まで行い、ラジオボタン「テーブルまたはビューから列を指定します」を選択した状態で、コンピュータ「Brunch」を選択
[4] 「データソースの構成」で、「WHERE」ボタン押下する
[5] 「WHERE句の追加」で、以下を選択し、「OK」押下。ぞのまま「完了」

 * 列:「CompanyCode」
 * 演算子:「=」
 * ソース:「Control」
  + Control ID:「DropDownList1」(CompanyのDropDownListを選択)
  + Value:None

[6] 親子DropDownListのイベントマーク(雷マーク)を選択し、DataBoundをクリック
[7] DataBoundの内容を以下の【ソース】を参考に記述
[8] 親DropDownListのプロパティを以下のようにする

■コントロール:DropDownList
 * AppendDataBoundItems:False
 * AutoPostBack:True

ソース

Protected Sub DropDownList1_DataBound(sender As Object, e As EventArgs) Handles DropDownList1.DataBound

    If (Me.DropDownList1.Items.Count = 0 OrElse _
        (Me.DropDownList1.Items.Count > 0 AndAlso Me.DropDownList1.Items(0).Value <> "None")) Then

        Dim defaultList As ListItem = New ListItem("-----", "None")
        Me.DropDownList1.Items.Insert(0, defaultList)
        defaultList.Selected = True

    End If
End Sub

Protected Sub DropDownList2_DataBound(sender As Object, e As EventArgs) Handles DropDownList2.DataBound

    If (Me.DropDownList2.Items.Count = 0 OrElse _
        (Me.DropDownList2.Items.Count > 0 AndAlso Me.DropDownList2.Items(0).Value <> "None")) Then

        Dim defaultList As ListItem = New ListItem("-----", "None")
        Me.DropDownList2.Items.Insert(0, defaultList)
        defaultList.Selected = True

    End If

End Sub

参考文献

http://natchan-develop.seesaa.net/article/49164594.html

メモ

 * でも、CascadingDropDownコントロールでやった方がいいかも
http://blogs.yahoo.co.jp/dk521123/26000475.html

関連記事

ASP.NET】DropDownList (ドロップダウンリスト)

http://blogs.yahoo.co.jp/dk521123/25919321.html

ASP.NET】ユーザーコントロール内のDropDownList(ドロップダウンリスト)の初期設定について

http://blogs.yahoo.co.jp/dk521123/27933856.html