C# 插入数据库后,从另一个窗体更新combobox中的值
我可以知道为什么我会得到奇怪的输出,当一个值从另一个窗体添加到数据库时,组合框不会刷新并显示新值。下面是我的示例代码 这是需要更新组合框的表单代码C# 插入数据库后,从另一个窗体更新combobox中的值,c#,C#,我可以知道为什么我会得到奇怪的输出,当一个值从另一个窗体添加到数据库时,组合框不会刷新并显示新值。下面是我的示例代码 这是需要更新组合框的表单代码 public partial class Form1 : Form { OleDbConnection con = new OleDbConnection("Provider=MSDAORA;Data Source=orcl;User ID=nareen1093;Password=nareen1093;Unicode=True");
public partial class Form1 : Form
{
OleDbConnection con = new OleDbConnection("Provider=MSDAORA;Data Source=orcl;User ID=nareen1093;Password=nareen1093;Unicode=True");
public Form1()
{
InitializeComponent();
loadButton();
}
public void loadButton ()
{
con.Open();
OleDbDataAdapter oda = new OleDbDataAdapter("select serial_number from fingerprint_device where serial_number like '%'", con);
DataTable dt = new DataTable();
oda.Fill(dt);
comboBox1.DataSource = dt;
comboBox1.DisplayMember = "serial_number";
comboBox1.SelectedIndex = -1;
con.Close();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.ShowDialog();
}
}
这是表单2中插入数据库的地方
public partial class Form2 : Form
{
OleDbConnection con = new OleDbConnection("Provider=MSDAORA;Data Source=orcl;User ID=nareen1093;Password=nareen1093;Unicode=True");
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
con.Open();
try
{
OleDbCommand cmd = new OleDbCommand("insert into fingerprint_device values ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "')", con);
cmd.ExecuteNonQuery();
MessageBox.Show("Registration Success", "Status", MessageBoxButtons.OK, MessageBoxIcon.Information);
con.Close();
Form1 form1 = new Form1();
form1.loadButton();
}
catch (Exception ex)
{
MessageBox.Show(ex + "", "Status", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
con.Close();
}
}
}
您正在做一些导致问题的事情 第一个问题 在Form2按钮中,单击创建新表单,调用此实例的loadButton并关闭Form2。因此,对Form2所做的任何更改现在都不存在了。这发生在执行
form2.ShowDialog()时代码>完成。
因此,您已经更新了comboBox,但是更新发生在Form1的一个新实例上,并且在不显示结果的情况下将其释放
第二个问题
您正在为Form2上的DB添加新值,但尚未更新Form1中的组合。由于处理了在Form2中创建的Form1的新实例(请参阅第一个问题),所以Form1的当前实例中的comboBox控件同样不会更新
解决方案
删除Form1 Form1=new Form1()代码>和form1.loadButton()代码>从表单2按钮1\u单击
。现在在form2.ShowDialog()之后添加loadButton()
代码>
现在,当Form2
关闭时,您的loadButton()
将执行并更新组合
public partial class Form1 : Form
{
OleDbConnection con = new OleDbConnection("Provider=MSDAORA;Data Source=orcl;User ID=nareen1093;Password=nareen1093;Unicode=True");
public Form1()
{
InitializeComponent();
loadButton();
}
public void loadButton ()
{
con.Open();
OleDbDataAdapter oda = new OleDbDataAdapter("select serial_number from fingerprint_device where serial_number like '%'", con);
DataTable dt = new DataTable();
oda.Fill(dt);
comboBox1.DataSource = dt;
comboBox1.DisplayMember = "serial_number";
comboBox1.SelectedIndex = -1;
con.Close();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.ShowDialog();
loadButton();
}
}
public partial class Form2 : Form
{
OleDbConnection con = new OleDbConnection("Provider=MSDAORA;Data Source=orcl;User ID=nareen1093;Password=nareen1093;Unicode=True");
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
con.Open();
try
{
OleDbCommand cmd = new OleDbCommand("insert into fingerprint_device values ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "')", con);
cmd.ExecuteNonQuery();
MessageBox.Show("Registration Success", "Status", MessageBoxButtons.OK, MessageBoxIcon.Information);
con.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex + "", "Status", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
con.Close();
}
}
}
先生,非常感谢您的解释,我现在明白了。我现在出去了,只是回来了,你不能回答