如何在对数据库

时间:2016-06-11 11:01:09

标签: c# visual-studio combobox sql-server-express

我有一个包含药物信息的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。关闭表单然后重新执行它会按预期重置组合框。

当绑定源发生变化时,是不是有一种更新组合框的简单方法?

0 个答案:

没有答案