0

ASPとVBを使用してドロップダウンをカスケードしようとしています

1st drop down   --> Sex Type
                            > Male
                            > Female
2nd Drop Down   -->Status
                            > Orphan
                            > Married
                            > UnMarried
                            > Divorced
                            > Widow
                            > Special Need
                            > Normal

ここで、
1番目のドロップダウンから男性を選択した場合は、2番目のドロップダウンから(孤児、特別支援、既婚、未婚、離婚、未亡人、通常)を選択します。

そして、1番目のドロップダウンから女性を選択した場合は、2番目のドロップダウンから(孤立、特別支援、通常)を選択します

エンティティを使用してデータベースからドロップドウォンのデータを取得しています。

VBコード

context As New EGrantsModel.Entities

ddlSexType.DataSource = context.SEXTYPE
ddlSexType.DataValueField = "SEXTYPE"
ddlSexType.DataTextField = "SEXTYPE"
ddlSexType.DataBind()

ddlCitizenStatus.DataSource = context.CITIZENSTATUS
ddlCitizenStatus.DataValueField = "CITIZENSTATUSID"
ddlCitizenStatus.DataTextField = "CITIZENSTATUS"
ddlCitizenStatus.DataBind()

ASPコード

<div class="labelinput">
 <asp:Label ID="lblSexType" CssClass="lblwidth" runat="server" Text="">Sex Type</asp:Label>
 <asp:DropDownList ID="ddlSexType" runat="server"/>
   </div>

 <div class="labelinput">
   <asp:Label ID="lblCitizenStatus" CssClass="lblwidth" runat="server" Text="">Status</asp:Label>
    <asp:DropDownList ID="ddlCitizenStatus" runat="server"/>
     </div>

誰かがこの点で私を導くことができますか?ありがとうございました

4

3 に答える 3

1

ddlSexTypeのSelectedindexchangeイベントで、2番目のドロップダウンをバインドします。最初のドロップダウンで選択したアイテムが男性と等しいかどうかを確認してから、対応するアイテムをバインドします。例:

protected void ddlSexType_SelectedIndexChanged(object sender, EventArgs e)
{    
   if( ddlSexType.Text == "Male" )
   {
     // Bind 2nd drop down
     // you can add items manually as 
      ListItem li = new ListItem();
      li.Text = "Orphan";

      ddlCitizenStatus.Items.Add(li);
      // Add all the items in the same way

    // or get data from the database and bind it to the dropdown

    DataTable dt = new DataTable();
    ddlCitizenStatus.DataSource = dt;
    ddlCitizenStatus.DataTextFeild= "DataFeild";
    ddlCitizenStatus.DataValueFeild= "DataValueFeild";
    ddlCitizenStatus.DataBind();
   }
   else if( ddlSexType.Text == "Female" )
  {
       // Bind other items
   }
}
于 2012-07-29T13:05:44.227 に答える
1

これをチェックして:

Public Class WebForm4
    Inherits System.Web.UI.Page

    Private Sub CitizenBind(ByVal strSexType As String)

        Dim lstCitizenStatus As New List(Of CitizenStatus)

        With lstCitizenStatus
            .Add(New CitizenStatus("1", "Orphan"))
            .Add(New CitizenStatus("2", "Married"))
            .Add(New CitizenStatus("3", "UnMarried"))
            .Add(New CitizenStatus("4", "Divorced"))
            .Add(New CitizenStatus("5", "Widow"))
            .Add(New CitizenStatus("6", "Special Need"))
            .Add(New CitizenStatus("7", "Normal"))
        End With

        Me.ddlCitizenStatus.Items.Clear()

        With Me.ddlCitizenStatus
            .DataSource = lstCitizenStatus
            .DataValueField = "CitizenStatusId"
            .DataTextField = "CitizenStatusT"
            .DataBind()
        End With

        If strSexType.Contains("F") Then

            Dim lstCitizenStatusRemove As New List(Of CitizenStatus)
            With lstCitizenStatusRemove
                .Add(New CitizenStatus("2", "Married"))
                .Add(New CitizenStatus("3", "UnMarried"))
                .Add(New CitizenStatus("4", "Divorced"))
                .Add(New CitizenStatus("5", "Widow"))
            End With

            For Each lstCS As CitizenStatus In lstCitizenStatusRemove
                Me.ddlCitizenStatus.Items.Remove(New ListItem(lstCS.CitizenStatusT.ToString(), lstCS.CitizenStatusId.ToString()))
            Next

        End If

    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        If Not Page.IsPostBack Then

            Dim lstSexType As New List(Of SexType)
            lstSexType.Add(New SexType("Male"))
            lstSexType.Add(New SexType("Female"))

            With Me.ddlSexType
                .DataSource = lstSexType
                .DataValueField = "SexTypeT"
                .DataTextField = "SexTypeT"
                .DataBind()
            End With

            CitizenBind("ALL")

        End If

    End Sub

    Protected Sub ddlSexType_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ddlSexType.SelectedIndexChanged

        CitizenBind(Me.ddlSexType.SelectedValue)

    End Sub

End Class

コードについて質問がある場合は、私に知らせてください。

于 2012-07-29T19:51:58.870 に答える
0

これが私の問題を解決した方法です

テーブルに3つのフィールドを追加するだけです

1- ISMALE

2- ISFEMALE

3- COMMON

そして、男性と女性の両方のステータスが共通している場合は、COMMON Trueにします。

また、男性のステータスについては、 ISMALE TrueとISFEMALEをFalseにします。

そして、女性のステータスについては、 ISFEMALE TrueとISMALEFalseを作成します。

VBコード

Protected Sub ddlSexType_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlSexType.SelectedIndexChanged
    Try

        Dim context As New EGrantsModel.Entities
        If (ddlSexType.SelectedValue = "Female") Then
            Dim femaleDataSource As Object
            femaleDataSource = (From femaleDS In context.CITIZENSTATUS _
                                Where femaleDS.ISFEMALE = "1" And femaleDS.ISMALE = "0" AndAlso femaleDS.COMMON = "1"
                                Select femaleDS)
            ddlCitizenStatus.DataSource = femaleDataSource
            ddlCitizenStatus.DataValueField = "CITIZENSTATUSID"
            ddlCitizenStatus.DataTextField = "CITIZENSTATUS"
            ddlCitizenStatus.DataBind()
        ElseIf (ddlSexType.SelectedValue = "Male") Then
            Dim maleDataSource As Object
            maleDataSource = (From femaleDS In context.CITIZENSTATUS _
                                Where femaleDS.ISFEMALE = "0" And femaleDS.ISMALE = "1" AndAlso femaleDS.COMMON = "1"
                                Select femaleDS)
            ddlCitizenStatus.DataSource = maleDataSource
            ddlCitizenStatus.DataValueField = "CITIZENSTATUSID"
            ddlCitizenStatus.DataTextField = "CITIZENSTATUS"
            ddlCitizenStatus.DataBind()
        End If
    Catch ex As Exception
        callErrorPage(ex.Message, ex.InnerException)
    End Try
End Sub

私はVBに本当に慣れていないので、誰かがこれが長いアプローチだと思ったら、より良いアプローチのために親切に私を更新してください。

貴重な時間と専門知識を提供してくれたWaqarJanjuaCoderRollerに改めて感謝します。

于 2012-07-29T22:13:28.703 に答える