リストを挿入する
* 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