You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET DropDownList在SelectedIndexChanged事件中未绑定SQL数据

解决DropDownList联动无数据更新的问题

我帮你排查下代码里的几个关键问题,这些应该就是导致DropDownList2没正常显示数据的原因:

问题1:SQL参数被错误解析为字符串字面量

你写的SQL语句里,把@ShipMake用单引号包起来了,这会让SQL把它当成普通字符串,而不是参数来匹配查询条件,自然查不到对应的数据。要去掉单引号:

String str2 = "SELECT DISTINCT [Ship Model] FROM ShipMatrix WHERE ([Ship Make] = @ShipMake)";

问题2:多余的ExecuteNonQuery()调用

ExecuteNonQuery()是用来执行增、删、改这类不返回结果集的操作的,你这里是查询数据,完全不需要调用它——直接用DataAdapter填充数据就行,这一步多余还可能干扰后续逻辑。

问题3:参数传递和控件值获取的细节问题

  • 添加参数时最好带@前缀,和SQL里的参数名严格保持一致;
  • 获取DropDownList的选中值,用SelectedValue比Text更可靠,尤其是当DataTextField和DataValueField不同的时候:
qry2.Parameters.Add("@ShipMake", SqlDbType.VarChar).Value = DropDownList1.SelectedValue;

问题4:未确认AutoPostBack属性

别忘了检查DropDownList1的AutoPostBack属性是否设置为true,如果是false的话,选中值变化时不会触发服务器端的SelectedIndexChanged事件,自然不会执行更新逻辑。

优化后的完整代码

另外,建议用using语句管理数据库连接和命令,避免连接泄漏:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    // 确保DropDownList1有选中值再执行
    if (string.IsNullOrEmpty(DropDownList1.SelectedValue))
        return;

    string str2 = "SELECT DISTINCT [Ship Model] FROM ShipMatrix WHERE ([Ship Make] = @ShipMake)";
    
    using (SqlConnection conn = new SqlConnection(Xebon.ConnectionString)) // 替换成你的连接字符串获取方式
    using (SqlCommand qry2 = new SqlCommand(str2, conn))
    {
        qry2.Parameters.Add("@ShipMake", SqlDbType.VarChar).Value = DropDownList1.SelectedValue;
        
        conn.Open();
        SqlDataAdapter sda2 = new SqlDataAdapter(qry2);
        DataTable ds2 = new DataTable();
        sda2.Fill(ds2);

        DropDownList2.DataSource = ds2;
        DropDownList2.DataTextField = "Ship Model";
        DropDownList2.DataValueField = "Ship Model";
        DropDownList2.DataBind();
        // 不需要手动Close,using会自动释放连接
    }
}

按照上面的修改后,应该就能正常联动更新DropDownList2的选项了。

内容的提问来源于stack exchange,提问作者mjc4wilton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:12:13