【问题标题】:Passing a variable to a dynamic dropdownlist将变量传递给动态下拉列表
【发布时间】:2011-08-13 05:01:26
【问题描述】:

我有 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

【问题讨论】:

  • 那么您要问的问题是什么?有没有报错,这个不行吗?
  • @Brian,这行不通。 “州”中的变量不会传递给“城市”,并且城市下拉列表不会加载。我只是得到一个错误。
  • 代码显示程序绑定而不是城市?无论如何,发布在下面。

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


【解决方案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 只会在你想要的时候绑定。

【讨论】:

    【解决方案2】:

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

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

    然后在选择事件中调用:

    Me.ddlCity.DataBind()
    

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

    【讨论】:

      【解决方案3】:

      我看不到 ddlState_SelectedIndexChanged 事件将会话变量写入何处。这是必需的。

      【讨论】:

        猜你喜欢
        • 2014-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-02
        • 2014-05-05
        相关资源
        最近更新 更多