我有一个包含药物信息的SQL Server Express数据库。我创建了一个窗体,以显示所选药物的信息。使用以下内容将表单上的组合框绑定到db:
string sqlQuery = "select * from meds";
cmd = new SqlCommand(sqlQuery, conn);
sqlDA.SelectCommand = cmd;
sqlDA.Fill(medsDT);
cboMeds.DataSource = medsDT;
cboMeds.DisplayMember = "medname";
cboMeds.ValueMember = "ID";
表单有一个文本框(“adjAmt”),允许用户更改 通过输入新数量来选择med的数量(“供应”) 然后单击“更改”按钮。
使用以下代码更新数据库:
SqlCommand cmdUpdate = new SqlCommand();
string cmdTxt = "Update meds set supply = '";
cmdTxt += adjAmt.ToString() + "' where ID = '";
cmdTxt += lblID.Text.ToString() + "';";
cmdUpdate.CommandText = cmdTxt;
cmdUpdate.Connection = conn;
cmdUpdate.ExecuteNonQuery();
此时一切都按设计工作,例如数据库已更新。更新后,我将用户返回到表单,并期望在表单上找到更新的值,但它没有。检查数据库,我找到新的“供应”值。我尝试了在StackOverflow上找到的几个选项,但似乎都没有。
这应该是一个简单的操作,但由于某种原因,它不是。我尝试过的一些选项包括清除和重新加载组合框:
cboMeds.Datasource = null;
string sqlQuery = "select * from meds";
cmd = new SqlCommand(sqlQuery, conn);
sqlDA.SelectCommand = cmd;
sqlDA.Fill(medsDT);
cboMeds.DataSource = medsDT;
cboMeds.DisplayMember = "medname";
cboMeds.ValueMember = "ID";
此操作失败,因为触发了SelectedIndexChanged
事件
当我尝试更改cboMeds.DataSource
属性时。该事件设置为
在组合框中选择项目时重新填充表单,因此当我尝试删除cboMeds.DataSource
时,它会触发抛出错误的事件:
“IndexOutOfRangeException”因为组合框中没有任何内容
将combobox.DataSource
设置为null。关闭表单然后重新执行它会按预期重置组合框。
当绑定源发生变化时,是不是有一种更新组合框的简单方法?