2009-06-01 7 views
2

Я нашел несколько примеров в Интернете, чтобы сделать это, но действительно изо всех сил стараюсь заставить его работать в VB. (Пробовал конвертер, но имел смешанные результаты)Заполнение PopdownList на основе другого DropDownList VB

Мне нужно, чтобы параметры выбора Dropdownlist заполнялись на основе разных значений в первом раскрывающемся списке.

Может ли кто-нибудь помочь с помощью простого примера в VB? Не суетится, если значения «жестко закодированы» в скрипте. Или SQL-бит, который извлекает данные из таблицы

Заранее благодарен!

+0

Пробовал этот конвертер? http://www.developerfusion.com/tools/convert/csharp-to-vb/ – Nick

ответ

2

Как это делается, чтобы заполнить второй выпадающий список в SelectedIndexChanged случае первого выпадающего списка

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 

С HTML источника, так:

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

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

Ваш лучший вариант будет захватить SelectedIndexChanged событие на первом DropDownList, исследовать то, что текущее значение этого DropDownList есть, а затем использовать его для очистки, а затем заполнить элементы во втором DropDownList , Когда вы это сделаете, не забудьте установить свойство AutoPostBack первого DropDownList на "true".

2

Вы можете выполнить это декларативно на странице ASPX, например:

<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" /> 
Смежные вопросы