一つ目のDropDownListの選択値によって二つ目のDropDownListのDataSourceを変更する方法です。
DataListのItemTemplateにDropDownListを二つ配置します。
<asp:DataList ID="DataList1" runat="server"> <ItemTemplate> <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" /> <asp:DropDownList ID="DropDownList2" runat="server" /> </ItemTemplate> </asp:DataList>
DataListのItemCreatedイベントで一つ目のDropDownListにデータを設定し
DropDownListのSelectedIndexChangedイベントを関連付けます。
Private Sub DataList1_ItemCreated(sender As Object, e As DataListItemEventArgs) Handles DataList1.ItemCreated Dim ddl1 As DropDownList = DirectCast(e.Item.FindControl("DropDownList1"), DropDownList) With ddl1 .DataValueField = "Cd" .DataTextField = "Name" .DataSource = GetDropDownList1Data() .DataBind() End With AddHandler ddl1.SelectedIndexChanged, AddressOf ddl1_SelectedIndexChanged End Sub
一つ目のDropDownListのSelectedIndexChangedイベントでは
一つ目のDropDownListのParentプロパティからDropDownListItemを取得します。
取得したDropDownListItemからFindControlで二つ目のDropDownListはオブジェクトを探します。
Private Sub ddl1_SelectedIndexChanged(sender As Object, e As EventArgs) Dim ddl1 As DropDownList = DirectCast(sender, DropDownList) Dim ddl1Cd As Integer = CInt(ddl1.SelectedValue) Dim item As DataListItem = DirectCast(ddl1.Parent, DataListItem) Dim ddl2 As DropDownList = DirectCast(item.FindControl("DropDownList2"), DropDownList) With ddl2 .DataValueField = "Cd" .DataTextField = "Name" .DataSource = GetDropDownList2Data(ddl1Cd) .DataBind() End With End Sub
0 件のコメント:
コメントを投稿