我有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
答案 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事件写入会话变量的位置。这是必需的。