[英]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.