2009-06-01 5 views
2

J'ai trouvé quelques exemples sur Internet pour le faire mais vraiment du mal à le faire fonctionner en VB. (J'ai essayé un convertisseur mais j'ai eu des résultats mitigés)Remplir DropdownList basé sur d'autres DropDownList VB

J'ai besoin que les options de sélection d'une liste déroulante soient remplies en fonction des valeurs différentes dans la première liste déroulante.

Quelqu'un peut-il aider avec un exemple simple releativley dans VB? Pas agité si les valeurs sont "codées en dur" dans le script. Ou un bit SQL qui tire les données d'une table

Merci d'avance!

+0

J'ai essayé ce convertisseur? http://www.developerfusion.com/tools/convert/csharp-to-vb/ – Nick

Répondre

2

La façon dont il est fait est de remplir deuxième menu déroulant en cas SelectedIndexChanged de la première liste déroulante

Example:

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 

Avec source HTML comme ceci:

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

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

Votre meilleure option sera de capturer l'événement SelectedIndexChanged le premier dropdownlist, examiner ce que la valeur actuelle de cette dropdownlist est, et ensuite utiliser que pour effacer puis remplir les éléments dans la deuxième dropdownlist . Lorsque vous faites cela, n'oubliez pas de définir la propriété AutoPostBack de la première DropDownList à "true".

2

Vous pouvez accomplir ceci déclarativement dans la page ASPX comme ceci:

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