Передача переменной в динамический выпадающий список

#asp.net #vb.net #data-binding #drop-down-menu

#asp.net #vb.net #привязка к данным #выпадающее меню

Вопрос:

У меня есть 2 выпадающих списка, один — штат, а второй — город. Я пытаюсь создать его таким образом, чтобы, когда пользователь нажимал на состояние, второй выпадающий список заполнялся названиями городов из таблицы данных.

Вот код

 <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<%--<cc2:CascadingDropDown ID="CascadingDropDown1" runat="server"> </cc2:CascadingDropDown>--%>
<h1>Live Event Search Engine</h1><br />
State: <asp:DropDownList ID="ddlState" runat="server" AutoPostBack="True" DataSourceID="SqlDataSource1" DataTextField="ST_Code" DataValueField="ST_Code" /><asp:SqlDataSource
    ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:dbConnection %>"
    SelectCommand="SELECT [ST_Code] FROM [State]">
    </asp:SqlDataSource>
City:  <asp:DropDownList ID="ddlCity" runat="server" DataSourceID="SqlDataSource2" DataTextField="RS_City" DataValueField="RS_City" /><asp:SqlDataSource
    ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:dbConnection %>"
    SelectCommand="web_PublicProgramListbyState" SelectCommandType="StoredProcedure">
<SelectParameters>
        <asp:SessionParameter Name="State" SessionField="ST_Code" Type="String" />
    </SelectParameters>
</asp:SqlDataSource>
       <asp:Button ID="Submit" runat="server" Text="Submit" />

</asp:Content>
  

и код, лежащий в основе, является

 Public Sub ddlState_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ddlState.SelectedIndexChanged
        Me.ddlCity.Items.Clear()
        Dim da As New SqlDataAdapter("web_PublicProgramListbyState", New SqlConnection(ConfigurationManager.AppSettings("dbConnection")))
        Dim ds As New DataSet
        da.Fill(ds, "@State")
        da.Dispose()
        Me.ddlCity.DataSource = ds.Tables("Products")
        Me.ddlCity.DataTextField = "ProductName"
        Me.ddlCity.DataValueField = "ProductID"
        Me.ddlCity.DataBind()
    End Sub
End Class
  

Комментарии:

1. Итак, о какой проблеме вы спрашиваете? Произошла ошибка, это не работает?

2. @Брайан, ну, это не работает. Переменная из «State» не передается в «City», и выпадающий список City не загружается. Я просто получаю сообщение об ошибке.

3. Код показывает привязку программ, а не городов? В любом случае, опубликовано ниже.

Ответ №1:

Похоже, вы пытаетесь включить в это dataset, когда у вас уже есть определенный SqlDataSource. Просто измените параметры SqlDataSource и повторно свяжите:

 Public Sub ddlState_SelectedIndexChanged(...)
    SqlDataSource2.SelectParameters.Clear()
    SqlDataSource2.SelectParameters.Add(New Parameter("@State", DbType.String, ddlState.SelectedValue))
    ddlCity.DataBind()
End Sub
  

Редактировать: Или вы можете использовать ControlParameter, ссылающийся на ddlState.Выбрано значение в SqlDataSource2.Выберите параметры, как указано в другом ответе. Единственная хитрость заключается в том, что вы должны тщательно управлять своими значениями по умолчанию, чтобы ddlCity привязывался только тогда, когда вы этого хотите.

Ответ №2:

Я бы изменил его на управляющий параметр и просто вызвал databind. Нет необходимости заполнять самостоятельно.

  <asp:ControlParameter Name="State" ControlID="ddlState" Type="String" /> 
  

и затем в событии выбора просто вызовите:

 Me.ddlCity.DataBind()
  

Или, если вы хотите удалить codebehind целиком, поместите его на панель обновления с помощью триггера.

Ответ №3:

Я не вижу, куда событие ddlState_SelectedIndexChanged записывает переменную сеанса. Это обязательно.