ASP.NET DropDownList 未在 SelectedIndexChanged 上绑定 SQL
Posted
技术标签:
【中文标题】ASP.NET DropDownList 未在 SelectedIndexChanged 上绑定 SQL【英文标题】:ASP.NET DropDownList not binding SQL on SelectedIndexChanged 【发布时间】:2018-03-16 02:05:14 【问题描述】:标题说明了大部分发生的事情。基本上我有两个 DropDownLists,其中一个根据前一个值进行 SQL 搜索,每次更改时都需要更新它。这是我的代码:
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
//Ship Model
String str2 = "SELECT DISTINCT [Ship Model] FROM ShipMatrix WHERE ([Ship Make]='@ShipMake')";
SqlCommand qry2 = new SqlCommand(str2, Xebon);
qry2.Parameters.Add("ShipMake", SqlDbType.VarChar).Value = DropDownList1.Text;
Connection.Open();
qry2.ExecuteNonQuery();
SqlDataAdapter sda2 = new SqlDataAdapter();
sda2.SelectCommand = qry2;
DataTable ds2 = new DataTable();
sda2.Fill(ds2);
DropDownList2.DataSource = ds2;
DropDownList2.DataTextField = "Ship Model";
DropDownList2.DataValueField = "Ship Model";
DropDownList2.DataBind();
Connection.Close();
不幸的是,它没有更新,下拉菜单仍然有大约 2-3 个字符长并且没有值/文本。
【问题讨论】:
您是否启用了AutoPostBack
属性?
【参考方案1】:
在 DropDownList1 上设置 AutoPostBack=true。
<asp:DropDownList ID="DropDownList1" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" runat="server">
</asp:DropDownList>
将@符号前缀放在sql参数中
qry2.Parameters.Add("@ShipMake", SqlDbType.VarChar).Value = DropDownList1.Text;
【讨论】:
这正在发回一个帖子,但它仍然没有用数据填充另一个文本框。当我在 Page_Load 中手动触发它时也不会这样做。我假设这是代码问题,而不是 asp.net / html【参考方案2】:DropDownList1.Text
在这里不起作用。如果要比较下拉菜单中所选项目的文本,可以使用以下方法之一。
qry2.Parameters.Add("@ShipMake", SqlDbType.VarChar).Value = DropDownList1.SelectedItem.Text;
或
qry2.Parameters.Add("@ShipMake", SqlDbType.VarChar).Value = DropDownList1.SelectedValue
【讨论】:
【参考方案3】:感谢这里的一些建议,我已启用 AutoPostBack
另外我的问题是使用“DropDownList.SelectedValue;”而不是“DropDownList.SelectedValue.ToString();”更改后一切正常。
【讨论】:
以上是关于ASP.NET DropDownList 未在 SelectedIndexChanged 上绑定 SQL的主要内容,如果未能解决你的问题,请参考以下文章
csharp ASP.NET MVC中的DropDownList #dropdownlist #selectlist
asp.net中用datatable给dropdownlist绑定数据