Передача переменной в динамический выпадающий список - PullRequest
1 голос
/ 26 апреля 2011

У меня есть 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>

и код

1007 *

Ответы [ 3 ]

1 голос
/ 26 апреля 2011

Похоже, вы пытаетесь внести в это набор данных, когда у вас уже определен 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.SelectedValue в SqlDataSource2.SelectParameters, как упомянуто в другом ответе.Единственная хитрость - вы должны тщательно управлять значениями по умолчанию, поэтому ddlCity связывается только тогда, когда вы этого хотите.

1 голос
/ 26 апреля 2011

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

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

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

Me.ddlCity.DataBind()

Или, если вы хотите удалить код за всем вместе, поместите его в обновлениепанель с триггером.

0 голосов
/ 26 апреля 2011

Я не вижу, где событие ddlState_SelectedIndexChanged записывает переменную сеанса. Это необходимо.

...