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();
    }
}
}

先生,非常感谢您的解释,我现在明白了。我现在出去了,只是回来了,你不能回答