2016-11-18 4 views
-1

stützen Sagen wir, ich habe 2 Tabellen:
a) TABELLE A
|country| id_country | |------- | ---------- | |USA | 1 | |England | 2 |ASP.NET-Filterung auf einer Dropdownlist vorherigen

b) Tabelle B
city | id_country ---------- | ---------- NY | 1 LA | 1 London | 2 Manchester | 2

Natürlich, wenn ich USA entschied sich für die Die zweite Dropdownliste sollte NY und LA anzeigen, aber ich weiß nicht, wie man einen Parameter der ersten Dropdownliste speichert. Der Code, der zweite Filter sollte wahrscheinlich Dropdownlist wie folgt aussehen:

select B.city from A, B where B.id_country = X

Und die x parametr von firstdropdownlist (A.id_country), alle Ideen, die mein Problem lösen würde?

+1

Suchen Sie nach kaskadierenden Dropdown-Liste. Es könnte etwas diskutiert werden. Ich kann nicht aus Ihrer Frage sagen, ob Sie dies aus einer UI- oder DB-Perspektive fragen. –

+0

https://www.google.co.uk/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=asp.net%20cascading%20dropdownlist. Die genaue Lösung hängt davon ab, ob Sie Forms oder MVC verwenden und ob Sie Ajax verwenden möchten oder nicht. In beiden Fällen müssen Sie das Ereignis behandeln, bei dem der Benutzer den Wert im ersten Dropdown ändert und eine neue Abfrage an die Datenbank senden, die den ausgewählten Wert übergibt (im obigen Beispiel "x"). Dann geben Sie das Ergebnis zurück und aktualisieren die verfügbaren Optionen im ersten Dropdown-Menü. Die Frage ist nicht klar genug, um eine spezifischere Antwort zu geben. – ADyson

Antwort

1

erste Dropdownliste mit id_country als Wertelement und Land als Anzeigeelement binden. Set AutoPostBack Eigenschaft des ersten Dropdown als wahr. Fügen Sie das ausgewählte Indexänderungsereignis zum ersten Dropdown-Menü hinzu (Doppelklick-Dropdown-Menü in der Entwurfsansicht). Bei ausgewähltem Ereignis mit geändertem Index können Sie das zweite Dropdown-Menü laden.

select city, id_country from B where id_country = @id_country 

Satz id_country Parameter aus der ersten Dropdown-SelectedValue, legen Sie die zweite Datenquelle Drop-down-Display und Wert-Mitglieder und schließlich DataBind() der zweiten Drop-Down-Aufruf

Check Creating Cascading DropDownLists in ASP.Net wenn Sie komplette Tutorial benötigen, oder Sie können versuchen, AJAX Cascading DropDownList with data load using web service methods without full page poastback

+0

Danke Mann, arbeitete perfekt für mich! – imaco

0

Sie können dies über einen AJAX-Aufruf tun. Wenn Sie die Option ändern, die aus der ersten Dropdown-Liste ausgewählt wurde, aktualisieren Sie die Optionen in der zweiten Dropdown-Liste.

z:

Sie zuerst den ersten Drop-Down mit Ländern laden. Aber laden Sie keine der Städte.

Wenn Sie dann ein Land aus dem Dropdown-Menü auswählen, aktualisieren Sie die Optionen für die Dropdown-Liste Städte über einen AJAX-Anruf für einen Dienst in Ihrem Back-End basierend auf dem ausgewählten Land.

Ich hoffe, es hilft.

+0

Genau danach suche ich, Städte müssen nicht erst geladen werden. Ich stütze mich jetzt auf ein wirklich einfaches Beispiel, weil ich 6 Dropdown-Listen brauche - jede nächste basiert auf einer vorherigen und ich denke Code dahinter wäre wirklich problematisch, also suche nach einer einfacheren Lösung. Danke, schau dir AJAX an. – imaco

+0

siehe diese Geige, https://jsfiddle.net/guschnwg/zL73rzqc/1/ Sie müssen nur einen Ajax Anruf tätigen und an die Select-Tag –

0

Warum müssen Sie den Parameter speichern? Ich habe eine Anwendung, wo wir Kategorien von Aktivitäten haben, und dann zwei weitere Ebenen von Details, die zweite Ebene hängt von der gewählten Kategorie ab, und die dritte hängt von der zweiten Ebene ab.

Hinweis - Diese App ist in Visual Basic geschrieben, aber ich sehe nichts über die Konzepte, die C# ausschließen würde.

In meinem Beispiel werden die Dropdown-Listen ddlActType (Primarstufe), ddlAct2Type und ddlAct3Type

wenn die Seite geladen Die Hauptliste wird geladen genannt. Ich erstelle eine Variable namens "selectAct", um den Wert zu speichern, der der Listenauswahl zugeordnet ist und mit dem Identitätswert in der Tabelle übereinstimmt. Ich muss die Variable eigentlich nicht erstellen, aber durch die Benennung wird deutlicher, was im Wartungsfall passiert. Wenn eine Auswahl getroffen wird, wird die sekundäre Dropdown-Liste verfügbar und ausgefüllt, wobei der ausgewählte Wert als Filter verwendet wird, für den die Elemente in der sekundären Liste geladen werden. Gleiches, wenn auf der sekundären Ebene eine Auswahl für diese Liste der dritten Ebene getroffen wird.Wenn sie in den Routinen "SelectedIndexChanged" den Standardwert/nothing auswählen, werden die nachfolgenden Listen deaktiviert und unsichtbar gemacht.

Primärliste Auswahl -

Protected Sub Activity_Type_Change(ByVal sender As Object, ByVal e As System.EventArgs) 
Handles ddlActType.SelectedIndexChanged 

    Dim selectedAct As Integer = 0 

    If ddlActType.SelectedIndex = 0 Then 
     ddlAct2Type.Visible = False 
     lblSpecs.Visible = False 
     ddlAct3Type.Visible = False 
     lblDetails.Visible = False 
    Else 
     ddlAct2Type.Visible = True 
     lblSpecs.Visible = True 
     ddlAct3Type.Visible = False 
     lblDetails.Visible = False 
     selectedAct = ddlActType.SelectedValue 
     Populate_Activity2_DDL(selectedAct) 
    End If 

End Sub 

Die Routine, die die zweite Liste lädt, die erste Liste Auswahl als Filter-Parameter übergeben -

Protected Sub Populate_Activity2_DDL(ByVal selOne As Integer) 

Dim strProcName As String = "usp_Get2ndLevelList" 

Dim connSQL As New SqlConnection 
Dim cmd As SqlCommand 

connSQL.ConnectionString = ConfigurationManager.ConnectionStrings("ThisDBsConnectionString").ToString 



cmd = New SqlCommand(strProcName, connSQL) 
cmd.CommandType = CommandType.StoredProcedure 
cmd.Parameters.AddWithValue("ActTypeID", selOne) 

cmd.Connection.Open() 

    'dd_AT2_Values means drop-down list activity type 2 values' 

Dim ddl_AT2_Values As SqlDataReader 
ddl_AT2_Values = cmd.ExecuteReader() 

If ddl_AT2_Values.HasRows = False Then 
    ddlAct2Type.Visible = False 
    lblSpecs.Visible = False 
    cmd.Connection.Close() 
    cmd.Connection.Dispose() 

    Exit Sub 
End If 

ddlAct2Type.DataSource = ddl_AT2_Values 
ddlAct2Type.DataValueField = "Ac2Type_ID" 
ddlAct2Type.DataTextField = "Ac2T_Name" 
ddlAct2Type.DataBind() 

ddlAct2Type.Items.Insert(0, New ListItem(String.Empty, String.Empty)) 
ddlAct2Type.SelectedIndex = 0 

cmd.Connection.Close() 
cmd.Connection.Dispose() 

     End If 

End Sub 

Sie wirklich nicht brauchen, um die Auswahl zu speichern aus der ersten Liste, wenn Sie nicht möchten, weil es als der ausgewählte Wert beibehalten wird. Das ursprüngliche Laden dieser ersten Liste erfolgt unter Nicht-Postback-Bedingungen.

Wenn Sie weitere Informationen benötigen, Fragen Sie sie über Kommentare und ich werde bearbeiten und zu verbessern, wie benötigt.

Verwandte Themen