C# 在数据库中插入新记录时,组合框值未得到更新
我正在数据库中插入一条记录,除了更新ComboBox的数据源外,一切都正常 下面是刷新组合框的代码:C# 在数据库中插入新记录时,组合框值未得到更新,c#,winforms,combobox,data-binding,C#,Winforms,Combobox,Data Binding,我正在数据库中插入一条记录,除了更新ComboBox的数据源外,一切都正常 下面是刷新组合框的代码: nStateTableAdapter1.Adapter.Update(stateCodeDataSet, "NState"); cmbStateCode.DataSource = nStateBindingSource1.DataSource; cmbStateCode.DisplayMember = "NState.CountryCode"; cmbStateCode.ValueMember
nStateTableAdapter1.Adapter.Update(stateCodeDataSet, "NState");
cmbStateCode.DataSource = nStateBindingSource1.DataSource;
cmbStateCode.DisplayMember = "NState.CountryCode";
cmbStateCode.ValueMember = "NState.CountryCode";
cmbStateCode.Refresh();
以上代码对我不起作用
有人能帮我用数据库中插入的新值更新组合框吗
编辑:
编辑1:
在设置新值之前,应尝试通过将数据源设置为null来重置绑定:
...
sqlCon.Open();
fillStateInfo();
nStateTableAdapter1.Adapter.Update(stateCodeDataSet, "NState");
cmbStateCode.DataSource = null; // reset binding
cmbStateCode.DataSource = nStateBindingSource1.DataSource;
cmbStateCode.DisplayMember = "NState.CountryCode";
cmbStateCode.ValueMember = "NState.CountryCode";
cmbStateCode.Refresh();
...
尝试使用SqlCommandBuilder。 此链接指向msdn文章 我更新了你的密码。这对我很有用
private void btnSave_Click(object sender, EventArgs e)
{
if (cmbStateCode.Text.ToString().Trim() == "" && txtCountryName.Text.ToString().Trim() == "")
{
MessageBox.Show("Please enter a valid data.", "Office Automation System", MessageBoxButtons.OK, MessageBoxIcon.None);
}
else
{
btnSave.Enabled = false;
btnEdit.Enabled = true;
// update your DataSet directly instead of this
/*try
{
string Query;
sqlCon.Open();
if (isEditMode)
Query = "UPDATE NState SET CountryName='" + txtCountryName.Text.ToString().Trim() + "' WHERE CountryCode='" + cmbStateCode.Text + "'";
else
Query = "INSERT INTO NState VALUES ('" + cmbStateCode.Text + "','" + txtCountryName.Text.ToString().Trim() + "')";
SqlCommand sqlCmd = new SqlCommand(Query, sqlCon);
sqlCmd.ExecuteNonQuery();
cmbStateCode.DropDownStyle = ComboBoxStyle.DropDownList;
MessageBox.Show("Record saved successfully.", "Office Automation System", MessageBoxButtons.OK, MessageBoxIcon.None);
}
catch
{
MessageBox.Show("Error occured while saving record.\nPlease check the StateCode for duplicate.", "Office Automation System", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
finally
{
sqlCon.Close();
}*/
SqlCommandBuilder builder = new SqlCommandBuilder(nStateTableAdapter1);
if (isEditMode)
{
// update DataSet
nStateTableAdapter1.UpdateCommand = builder.GetUpdateCommand();
}
else
{
// insert value to DataSet
nStateTableAdapter1.InsertCommand = builder.GetUpdateCommand();
}
nStateTableAdapter1.Adapter.Update(stateCodeDataSet, "NState");
// it's not necessary, ComboBox will have a new values
/*try
{
sqlCon.Open();
fillStateInfo();
nStateTableAdapter1.Adapter.Update(stateCodeDataSet, "NState");
cmbStateCode.DataSource = nStateBindingSource1.DataSource;
cmbStateCode.DisplayMember = "NState.CountryCode";
cmbStateCode.ValueMember = "NState.CountryCode";
cmbStateCode.Refresh();
}
catch (Exception ex)
{
}
finally
{
sqlCon.Close();
}*/
}
}
@VadimSentyaev:我已经添加了“保存”按钮上的代码。我想你不需要像那样刷新它,只需清除cb中存在的项目,然后添加新的项目就可以解决问题。也许有必要更新nStateBindingSource1.DataSource?在您提供的代码中,我没有看到stateCodeDataSet和nStateBindingSource1.DataSource之间的连接。@sesamasemaseam:您能给出一个示例吗??我试图这么做,但没有得到..@VadimSentyaev:我已将我的设计窗口中的stateCodeDataSet和nStateBindingSource1分配给combobox。请查看我的EDIT1部分。我已经实现了你的代码。。但是不工作。。。
...
sqlCon.Open();
fillStateInfo();
nStateTableAdapter1.Adapter.Update(stateCodeDataSet, "NState");
cmbStateCode.DataSource = null; // reset binding
cmbStateCode.DataSource = nStateBindingSource1.DataSource;
cmbStateCode.DisplayMember = "NState.CountryCode";
cmbStateCode.ValueMember = "NState.CountryCode";
cmbStateCode.Refresh();
...
private void btnSave_Click(object sender, EventArgs e)
{
if (cmbStateCode.Text.ToString().Trim() == "" && txtCountryName.Text.ToString().Trim() == "")
{
MessageBox.Show("Please enter a valid data.", "Office Automation System", MessageBoxButtons.OK, MessageBoxIcon.None);
}
else
{
btnSave.Enabled = false;
btnEdit.Enabled = true;
// update your DataSet directly instead of this
/*try
{
string Query;
sqlCon.Open();
if (isEditMode)
Query = "UPDATE NState SET CountryName='" + txtCountryName.Text.ToString().Trim() + "' WHERE CountryCode='" + cmbStateCode.Text + "'";
else
Query = "INSERT INTO NState VALUES ('" + cmbStateCode.Text + "','" + txtCountryName.Text.ToString().Trim() + "')";
SqlCommand sqlCmd = new SqlCommand(Query, sqlCon);
sqlCmd.ExecuteNonQuery();
cmbStateCode.DropDownStyle = ComboBoxStyle.DropDownList;
MessageBox.Show("Record saved successfully.", "Office Automation System", MessageBoxButtons.OK, MessageBoxIcon.None);
}
catch
{
MessageBox.Show("Error occured while saving record.\nPlease check the StateCode for duplicate.", "Office Automation System", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
finally
{
sqlCon.Close();
}*/
SqlCommandBuilder builder = new SqlCommandBuilder(nStateTableAdapter1);
if (isEditMode)
{
// update DataSet
nStateTableAdapter1.UpdateCommand = builder.GetUpdateCommand();
}
else
{
// insert value to DataSet
nStateTableAdapter1.InsertCommand = builder.GetUpdateCommand();
}
nStateTableAdapter1.Adapter.Update(stateCodeDataSet, "NState");
// it's not necessary, ComboBox will have a new values
/*try
{
sqlCon.Open();
fillStateInfo();
nStateTableAdapter1.Adapter.Update(stateCodeDataSet, "NState");
cmbStateCode.DataSource = nStateBindingSource1.DataSource;
cmbStateCode.DisplayMember = "NState.CountryCode";
cmbStateCode.ValueMember = "NState.CountryCode";
cmbStateCode.Refresh();
}
catch (Exception ex)
{
}
finally
{
sqlCon.Close();
}*/
}
}