绑定SQL表的DropdownList保存时未写入目标SQL表问题求助
问题分析与解决方案
核心问题
你的代码中,Page_Load事件里的DropdownList绑定逻辑未放在!IsPostBack判断内,导致每次页面回发(比如点击保存按钮)时,都会重新绑定DropdownList1和DropdownList4,直接覆盖用户之前选择的选项。这就造成btnSave_Click事件中获取的SelectedItem.Text是重新绑定后的默认值,而非用户实际选择的内容。
修复步骤
1. 调整Page_Load中的绑定逻辑
将DropdownList的绑定代码移到!IsPostBack代码块内,确保只有首次加载页面时才执行绑定:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { btnDelete.Enabled = false; string mainconn = ConfigurationManager.ConnectionStrings["Reporting_SystemConnectionString"].ConnectionString; SqlConnection sqlconn = new SqlConnection(mainconn); string sqlquery = "select [ID],[Emp_ID] + ' ' + [Emp_Name] as FullName from [dbo].[Personnel] where [JurisdictionID] = 99"; SqlCommand sqlcomm = new SqlCommand(sqlquery, sqlconn); sqlconn.Open(); DataSet ds = new DataSet(); SqlDataAdapter sda = new SqlDataAdapter(sqlcomm); sda.Fill(ds); DropDownList1.DataSource = ds; DropDownList1.DataTextField = "FullName"; DropDownList1.DataValueField = "ID"; DropDownList1.DataBind(); DropDownList1.Items.Insert(0, new ListItem("", "0")); DropDownList4.DataSource = ds; DropDownList4.DataTextField = "FullName"; DropDownList4.DataValueField = "ID"; DropDownList4.DataBind(); DropDownList4.Items.Insert(0, new ListItem("", "0")); sqlconn.Close(); } }
2. 修正Clear方法的逻辑
原Clear方法中清空了DropdownList1和4的Items,会导致后续页面回发时下拉列表为空。改为设置SelectedIndex为0,保留下拉选项的同时重置选中状态:
public void Clear() { ID.Value = ""; // 重置选中项而非清空列表 DropDownList1.SelectedIndex = 0; DropDownList2.Items.Clear(); TextBox1.Text = ""; DropDownList3.Items.Clear(); DropDownList4.SelectedIndex = 0; lblSuccessMessage.Text = lblErrorMessage.Text = ""; btnSave.Text = "Save"; btnDelete.Enabled = false; }
3. 额外验证点
- 确认
Dispatcher_Roles表的Name和DispatcherCovering字段类型为nvarchar(max),与存储过程参数类型一致,避免因类型不匹配导致数据写入失败。 - 若业务需要存储的是用户选择项的ID(而非显示文本),可将参数值改为
DropDownList1.SelectedValue,同时确保存储过程和数据库字段的类型与ID匹配(比如int类型)。
内容的提问来源于stack exchange,提问作者Walter G
相关产品推荐
相关产品推荐

