ASP.Netのお勉強

DropDownListの選択毎に別なDropDownListの項目を変更@ASP.Net

区分1のDropDownListを選択したら、区分2のDropDownListの項目を変更します。
県を選択したら、その県の市が表示されるみたいなものです。

色々やり方はあるかと思いますが、DropDownListとObjectDataSourceを使用します。

ObjectDataSourceに設定するKBN.classを作成します。
DataTableを返すメソッドを二つ作成します。
片方は、引数を元にDataTableの内容を変えるメソッドです。

DropDownListを二つ、ObjectDataSourceを二つ配置し設定を行います。
片方のObjectDataSourceは、パラメータが必要なので、
パラメータの設定を行います。
パラメータは、Controlで、DropDownListのSelectedValueとします。

●aspx

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default4.aspx.vb" Inherits="Default4" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>DropDownList</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="ObjectDataSource1" DataTextField="KBN1" DataValueField="NO1" AutoPostBack="True">
        </asp:DropDownList>

        <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True" DataSourceID="ObjectDataSource2" DataTextField="KBN2" DataValueField="NO2">
        </asp:DropDownList>

        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetKBN" TypeName="KBN"></asp:ObjectDataSource>
        <asp:ObjectDataSource ID="ObjectDataSource2" runat="server" SelectMethod="GetKbn2"
            TypeName="KBN">
            <SelectParameters>
                <asp:ControlParameter ControlID="DropDownList1" Name="no" PropertyName="SelectedValue"
                    Type="String" />
            </SelectParameters>
        </asp:ObjectDataSource>
    </div>
    </form>
</body>
</html>


●KBN.class

Imports Microsoft.VisualBasic
Imports System.data

Public Class KBN

    Public Function GetKbn() As DataTable
        Dim dt As DataTable
        Dim dr As DataRow

        dt = New DataTable

        dt.Columns.Add("NO1", GetType(String))
        dt.Columns.Add("KBN1", GetType(String))

        dr = dt.NewRow
        dr("NO1") = "1"
        dr("KBN1") = "区分1"
        dt.Rows.Add(dr)

        dr = dt.NewRow
        dr("NO1") = "2"
        dr("KBN1") = "区分2"
        dt.Rows.Add(dr)

        Return dt
    End Function

    Public Function GetKbn2(ByVal no As String) As DataTable
        Dim dt As DataTable
        Dim dr As DataRow

        dt = New DataTable

        dt.Columns.Add("NO2", GetType(String))
        dt.Columns.Add("KBN2", GetType(String))

        If no = "1" Then
            dr = dt.NewRow
            dr("NO2") = "1"
            dr("KBN2") = "A"
            dt.Rows.Add(dr)

            dr = dt.NewRow
            dr("NO2") = "2"
            dr("KBN2") = "B"
            dt.Rows.Add(dr)
        ElseIf no = "2" Then
            dr = dt.NewRow
            dr("NO2") = "3"
            dr("KBN2") = "C"
            dt.Rows.Add(dr)

            dr = dt.NewRow
            dr("NO2") = "4"
            dr("KBN2") = "D"
            dt.Rows.Add(dr)
        End If

        Return dt
    End Function
End Class


Copyright (C) ASP.Netのお勉強. All Rights Reserved.