2012-07-29 2 views
0

Je suis en train de cascader dropdowns en utilisant ASP et VBDéroulant Cascade Problème: Comment cascade à deux déroulant

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

Maintenant,
Si Homme sélectionné à partir du 1er menu déroulant, puis sélectionnez (Orphelin, spécial besoin, Couple marié, célibataire, divorcé, veuve et normale) du 2 drop Down

et si Femme sélectionné à partir du 1er menu déroulant, puis sélectionnez (Orphan, besoin et normal spécial) du 2 drop Down

Je reçois données de dwons de la base de données nous Entités;

Code 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 code

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

Quelqu'un peut-il me guider dans ce qui concerne. Merci

Répondre

1

Vérifiez ceci:

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 

Si vous avez des questions sur le code s'il vous plaît laissez-moi savoir.

+0

Merci beaucoup CoderRoller pour votre réponse gentille et généreuse, cela m'aide vraiment et juste pour informer que j'ai résolu mon problème, ma réponse est ci-dessous, mais j'accepte votre réponse. – AbdulAziz

1

Dans l'événement de modification d'index sélectionné de ddlSexType lier le 2ème menu déroulant. Cochez l'élément sélectionné dans la première liste déroulante s'il est égal à Homme puis liez les éléments correspondants. Exemple:

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

Merci pour votre réponse, mais ce n'est pas le cas exact. J'essaye de filtrer les données aussi bien en sélectionnant le mâle. – AbdulAziz

+0

@AbdulAziz ok. Les données que vous allez lier pour la deuxième liste déroulante sont présentes dans une seule table et vous voulez les filtrer? –

+0

Oui, ce que je veux accomplir. Je veux dire que si je sélectionne "Femme", alors c'est bien de sélectionner tous les éléments du tableau, mais si je sélectionne "Homme" il ne filtre que quelques éléments. J'apprécie vraiment votre aide aimable. – AbdulAziz

0

Voilà comment je résolu mon problème

Je viens d'ajouter trois champs dans ma table

1- ISMALE 

2- ISFEMALE 

3- COMMON 

Et faire COMMONvrai si les deux statuts masculins et féminins sont en commun.

Et faire ISMALEvrai et ISFEMALE Faux pour les statuts masculins.

Et faire ISFEMALEvrai et ISMALE Faux pour les statuts féminins.

Code 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 

Je suis vraiment nouveau à VB, donc si quelqu'un pense que cette approche long m'a alors vouloir mettre à jour pour une meilleure approche.

Merci encore à Waqar Janjua et CoderRoller pour leur temps précieux et de l'expertise.

+0

vous êtes les bienvenus –

+0

Toujours la bienvenue Abdul! – CoderRoller