2013-03-20 65 views
7

上時,我有2種形式,其是form Aform BC#刷新的DataGridView更新或插入的另一種形式

form A allowes用戶插入和更新學生信息。

form b只是一個DataGridView和按鈕。

當我插入學生上form A,然後我去form B,新的學生沒有顯示在DataGridView的,如果我重新運行該程序,新的學生將出現在form B

我試圖在表格B

datagridview1.refresh(); 
datagridview1.update(); 

按鈕使用這一點,但它仍然沒有工作。


編輯:

我插入一個工人

cmd = new OleDbCommand("insert into FWINFOS (ID,Name,Gender,DateOfBirth,Race,WorkingPlace,PassportNO,DateOfExpire,[Position],Photo) values('" + textBox5.Text + "','" + textBox1.Text + "','" + textBox2.Text + "','" + dateTimePicker1.Value + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox6.Text + "','" + dateTimePicker2.Value + "',@Position,@Photo)", con); 


     cmd.Parameters.AddWithValue("@Position", comboBox1.SelectedText.ToString()); 
     conv_photo(); 

     con.Open(); 
     int n = cmd.ExecuteNonQuery(); 
     //cmd.ExecuteNonQuery(); 
     con.Close(); 
     if (n > 0) 
     { 
      MessageBox.Show("Inserted"); 
      loaddata(); 

      rno++; 
     } 
     else 
      MessageBox.Show("No Insert"); 



    } 

代碼我Datagridview1(Form2)當我插入一個新的工作不會自動更新。但是,如果我重新運行應用程序,則會顯示新工作人員。

+0

籌集形式2一事件,處理它在形式上1再次檢索你的GridView數據 – NoviceProgrammer 2013-03-20 15:06:01

+0

@NoviceProgrammer,我能有例子嗎? – 2013-03-20 15:13:30

+0

問題已解決。謝謝大家! – 2013-03-22 01:37:01

回答

10
// Form A 
public void loaddata() 
{ 
    //do what you do in load data in order to update data in datagrid 
} 

然後在表格B定義:

// Form B 
FormA obj = (FormA)Application.OpenForms["FormA"]; 

private void button1_Click(object sender, EventArgs e) 
{ 
    obj.loaddata(); 
    datagridview1.Update(); 
    datagridview1.Refresh(); 
} 
+0

所以我必須在窗體A上創建一個按鈕..是否有其他方法? – 2013-03-20 14:23:43

+0

你必須在表單A上觸發一個新的數據輸入的事件,所以數據網格必須更新...必須在表單A中完成... – apomene 2013-03-20 14:25:07

+0

基本上有一個替代方案....... – apomene 2013-03-20 14:28:47

2

DataGridView.Refresh和而DataGridView.Update是被從控制繼承的方法。他們必須重新繪製控制,這就是爲什麼新行沒有出現。

我的猜測是數據檢索在Form_Load上。如果你想讓Form B上的Button從數據庫中檢索最新的數據,那麼這就是Form_Load正在做的事情。

一個很好的方法是將你的數據檢索調用分離成一個單獨的函數,並從From Load和Button Click事件中調用它。

1

把一個簡單的例子,應該是足夠的起點

代碼中,形式A

public event EventHandler<EventArgs> RowAdded; 

private void btnRowAdded_Click(object sender, EventArgs e) 
{ 
    // insert data 
    // if successful raise event 
    OnRowAddedEvent(); 
} 

private void OnRowAddedEvent() 
{ 
    var listener = RowAdded; 
    if (listener != null) 
     listener(this, EventArgs.Empty); 
} 

代碼表格B

private void button1_Click(object sender, EventArgs e) 
{ 
    var frm = new Form2(); 
    frm.RowAdded += new EventHandler<EventArgs>(frm_RowAdded); 
    frm.Show(); 
} 

void frm_RowAdded(object sender, EventArgs e) 
{ 
    // retrieve data again 
} 

你甚至可以考慮創建自己的EventArgs類可以包含新添加的數據。然後,您可以用它來直接將數據添加到一個新的行中的DataGridView

+0

沒有爲我工作:在你的'MessageBox.Show(「Inserted」);'調用'OnRowAddedEvent();' Ma之後S – 2013-03-20 15:48:05

+0

Ma請確保您以其他形式訂閱活動 – NoviceProgrammer 2013-03-20 15:50:28

+0

我們可以通過Skype或MSN聊天嗎? SKYPE:JKT MSN:jun[email protected] – 2013-03-20 15:55:23

1

對於datagridview的在C#中,使用此代碼

con.Open(); 
MySqlDataAdapter MyDA = new MySqlDataAdapter(); 
string sqlSelectAll = "SELECT * from dailyprice"; 
MyDA.SelectCommand = new MySqlCommand(sqlSelectAll, con); 

DataTable table = new DataTable(); 
MyDA.Fill(table); 

BindingSource bSource = new BindingSource(); 
bSource.DataSource = table; 


dataGridView1.DataSource = bSource; 
con.Close(); 

它適用於在DataGridView顯示新記錄。

1

用於刷新數據的GridView在任何地方,你只需要驗證碼:

datagridview1.DataSource = "your DataSource"; 
datagridview1.Refresh(); 
1

我的datagridview是editonEnter模式。所以它只有在我離開細胞後或者在我重新訪問並退出細胞兩次之後纔會刷新。

觸發此iimedately。我從datagridview沒有重點。然後重新調整它。

this.SelectNextControl(dgv1,true,true,false,true);  
Application.DoEvents(); //this does magic 
dgv1.Focus();