将变量传递给动态下拉列表

时间:2011-04-26 16:45:58

标签: asp.net vb.net data-binding drop-down-menu

我有2个下拉列表,一个是State,第二个是City。我正在尝试创建它,以便当用户单击State时,第二个下拉列表将填充数据表中的City名称。

这是代码

<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

3 个答案:

答案 0 :(得分:1)

当您已经定义了SqlDataSource时,您似乎正在尝试将数据集引入此中。只需修改SqlDataSource的参数并重新绑定:

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

编辑:或者您可以在SqlDataSource2.SelectParameters中使用引用ddlState.SelectedValue的ControlParameter,如另一个答案中所述。只有技巧,你必须仔细管理你的默认值,所以ddlCity只在你想要的时候绑定。

答案 1 :(得分:1)

我会将其更改为控制参数,然后调用数据绑定。无需自己填写。

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

然后在select事件中调用:

Me.ddlCity.DataBind()

或者,如果您想要删除所有代码隐藏,请将其置于带触发器的更新面板中。

答案 2 :(得分:0)

我没有看到ddlState_SelectedIndexChanged事件写入会话变量的位置。这是必需的。