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