簡體   English   中英

插入數據庫后,從另一種形式更新組合框中的值

[英]Updating value in combobox from another form after inserted to database

我能知道為什么我得到奇怪的輸出,從而當從另一種形式向數據庫添加值時,組合框不會刷新並顯示新值的問題。 在我的示例代碼下面

這是需要更新組合框的表單代碼

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

這是在form2中插入數據庫的位置。

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按鈕中,單擊創建一個表單,調用此INSTANCE的 loadButton並關閉Form2。 因此,對Form2所做的任何更改現在都消失了。 這是在執行form2.ShowDialog();時發生的form2.ShowDialog(); 完成。 因此,您已經更新了comboBox,但是更新發生在Form1的新實例上,並且在不顯示結果的情況下將其丟棄。

第二個問題

您正在向Form2上的DB添加新值,但尚未在Form1中更新組合。 由於處理了在Form2中創建的Form1的新實例(請參閱第一個問題),因此,同樣不會更新Form1當前實例中的comboBox控件。

刪除Form1 form1 = new Form1(); form1.loadButton(); 從Form2 button1_Click 現在在loadButton()之后添加loadButton() form2.ShowDialog();

現在,當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();
    }
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM