2009-06-01 15 views
2

Ich habe ein paar Beispiele im Internet gefunden, um dies zu tun, aber wirklich darum gekämpft, dass es in VB funktioniert. (Versuchte einen Konverter, hatte aber gemischte Ergebnisse)Populate DropDownList basierend auf anderen DropDownList VB

Ich brauche die Auswahlmöglichkeiten einer Dropdown-Liste, die basierend auf den unterschiedlichen Werten in der ersten Dropdown-Liste ausgefüllt wird.

Kann jemand mit einem relational einfachen Beispiel in VB helfen? Nicht unscharf, wenn die Werte im Skript "fest codiert" sind. Oder ein SQL-Bit, das die Daten aus einer Tabelle holt

Vielen Dank im Voraus!

+0

Versucht dieser Konverter? http://www.developerfusion.com/tools/convert/csharp-to-vb/ – Nick

Antwort

2

So wie es geschehen ist, ist zweite Drop-Down in SelectedIndexChanged-Ereignis des ersten Dropdown

Example zu füllen:

Protected Sub ddlCountry_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) 
    Dim CountryID As Integer = Convert.ToInt32(ddlCountry.SelectedValue.ToString()) 
    FillStates(CountryID) 
End Sub 


Private Sub FillStates(ByVal countryID As Integer) 
    Dim strConn As String = ConfigurationManager.ConnectionStrings("DatabaseConnectionString").ConnectionString 
    Dim con As New SqlConnection(strConn) 
    Dim cmd As New SqlCommand() 
    cmd.Connection = con 
    cmd.CommandType = CommandType.Text 
    cmd.CommandText = "Select StateID, State from State where CountryID [email protected]" 
    cmd.Parameters.AddWithValue("@CountryID", countryID) 
    Dim objDs As New DataSet() 
    Dim dAdapter As New SqlDataAdapter() 
    dAdapter.SelectCommand = cmd 
    con.Open() 
    dAdapter.Fill(objDs) 
    con.Close() 
    If objDs.Tables(0).Rows.Count > 0 Then 
    ddlState.DataSource = objDs.Tables(0) 
    ddlState.DataTextField = "State" 
    ddlState.DataValueField = "StateID" 
    ddlState.DataBind() 
    ddlState.Items.Insert(0, "--Select--") 
    Else 
    lblMsg.Text = "No states found" 
    End If 
End Sub 

Mit HTML-Quellcode als so:

<asp:DropDownList ID="ddlState" runat="server" AutoPostBack="True"> 
    </asp:DropDownList> 

    <asp:DropDownList ID="ddlCountry" runat="server" 
    AutoPostBack="True" OnSelectedIndexChanged="ddlCountry_SelectedIndexChanged"> 
</asp:DropDownList> 
0

Ihre beste Option sein, das SelectedIndexChanged Ereignis auf der ersten Dropdownlist zu erfassen, zu untersuchen, was der aktuelle Wert, dass Dropdownlist ist, und dann, dass löschen verwenden und dann die Elemente in der zweiten Dropdownlist bevölkert . Denken Sie daran, die Eigenschaft AutoPostBack der ersten DropDownList auf "true" zu setzen, wenn Sie dies tun.

2

Sie erreichen könnte dies deklarativ in der ASPX-Seite wie folgt:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:myConnString %>" SelectCommand="SELECT id, name FROM planets"></asp:SqlDataSource> 
<asp:DropDownList ID="ddlPlanets" AutoPostBack="true" DataTextField="name" DataValueField="id" DataSourceID="SqlDataSource1" runat="server" AppendDataBoundItems="true" /> 

<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:myConnString %>" SelectCommand="SELECT planetid, name FROM moons" FilterExpression="planetid = '{0}'"> 
    <FilterParameters> 
     <asp:ControlParameter Name="planetid" ControlID="ddlPlanets" PropertyName="SelectedValue" /> 
    </FilterParameters> 
</asp:SqlDataSource>  
<asp:DropDownList ID="ddlMoons" DataTextField="name" DataValueField="planetid" DataSourceID="SqlDataSource2" runat="server" />