【问题标题】:Drop-Down Cascade Issue: How to cascade two drop down下拉级联问题:如何级联两个下拉
【发布时间】:2012-07-29 12:59:57
【问题描述】:

我正在尝试使用 ASP 和 VB 级联下拉菜单

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

现在,
如果从第一个下拉列表中选择男性,则从第二个下拉列表中选择(孤儿、特殊需要、已婚、未婚、离婚、寡妇和正常)

如果从第一个下拉列表中选择女性,则从第二个下拉列表中选择(孤儿、特殊需要和正常)

我正在使用实体从数据库中获取 drop dwons 的数据;

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>

任何人都可以在这方面指导我。谢谢

【问题讨论】:

    标签: asp.net database vb.net entity-framework drop-down-menu


    【解决方案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
    

    如果您对代码有任何疑问,请告诉我。

    【讨论】:

    • 非常感谢 CoderRoller 的友好和慷慨的回复,它真的对我很有帮助,只是告诉我我是如何解决我的问题的,我的答案如下,但我接受你的答案。
    【解决方案2】:

    在 ddlSexType 的 Selected index change 事件上绑定第二个下拉列表。 检查第一个下拉列表中的选定项目是否等于男性,然后绑定相应的项目。 示例:

    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
       }
    }
    

    【讨论】:

    • 感谢您的回答,但情况并非如此。选择男性时,我也在尝试过滤数据。
    • @AbdulAziz 好的。您将为第二个下拉列表绑定的数据存在于单个表中,您要过滤它们吗?
    • 是的,这就是我想要完成的。我的意思是,如果我选择“女性”,那么可以选择表中的所有项目,但如果我选择“男性”,它只会过滤一些项目。非常感谢您的帮助。
    【解决方案3】:

    这就是我解决问题的方法

    我只是在表中添加三个字段

    1- ISMALE
    
    2- ISFEMALE
    
    3- COMMON
    

    如果男性和女性身份相同,则将COMMON True

    并将ISMALE True 和 ISFEMALE False 设置为男性状态。

    并将ISFEMALE True 和 ISMALE False 设置为女性身份。

    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 的新手,所以如果有人认为这是一个冗长的方法,那么请更新我以获得更好的方法。

    再次感谢 Waqar JanjuaCoderRoller 的宝贵时间和专业知识。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      相关资源
      最近更新 更多