2012-04-21 105 views
1

我對形式的Load事件填充表收集一個DataGridView,我也有用戶填寫表單和添加新行後如何更新DataGridView的行列表表onclick事件,我想加入新行到表後更新datagridview的,我使用綁定到一個bindingdatasource一個sqladapter。 這是代碼添加新行到表

 private void button1_Click(object sender, EventArgs e) 
     { 
     connection.Open(); 
     string nv = textBox7.Text.Trim().Replace(',', '.'); 
     // 
     string sql=""; 
     sql = "INSERT INTO Employe(id_cnss, nom, prenom, adresse,  tel,email,mt_heur_travail, titre)  VALUES('"+textBox1.Text.ToString().Trim()+"','"+textBox2.Text.ToString().Trim()+"','"+textBox3.Text.ToString().Trim()+"','"+richTextBox1.Text.ToString().Trim()+"','"+textBox4.Text.ToString().Trim()+"','"+textBox5.Text.ToString().Trim()+"',"+nv+",'"+textBox6.Text.Trim()+"')"; 
     // sql = "UPDATE Employe SET id_cnss ='" + + "' , nom ='" + + "', prenom ='" + + "', adresse ='" + + "', tel ='" + + "', email ='" + + "', mt_heur_travail =" + + ", titre ='" + + "' where id_cnss=" + index; 
     c = new SqlCommand(sql, connection); 
     c.CommandText = sql; 
     // IAsyncResult res; 
     int ex = c.ExecuteNonQuery(); 
     if (ex != null) 
     { 
      MessageBox.Show("employé ajouté"); 
      //dataGridView1.Rows.Clear(); 
      //DataTable table = (DataTable)dataGridView1.DataMember; 
      adapter = new SqlDataAdapter("select * from employe where  id_emp=IDENT_CURRENT('EMPLOYE')", connection); 
      adapter.Fill(dTable); 
      //adapter.Update(dTable); 
      dataGridView1.Refresh(); 
     } 
      connection.Close(); 
    } 

該代碼表中的所有行添加到DataGridView但我只需要添加添加到數據庫中 brievely,當在添加用戶點擊的最新行,

我想,新的行會被添加到DataGridView 謝謝你提前

+0

目前尚不清楚你的問題是在這裏。你問爲什麼數據庫中的新行不顯示在datagridview中?或者如何將添加到datagridview的行添加到數據庫?還有別的嗎? – 2012-04-21 13:20:26

+0

我問爲什麼數據庫的新行(添加onclick事件)不是要麼添加到datagridview。 adapter.fill(dtable)添加數據庫的所有行,但我只需要添加新行 – tarek 2012-04-21 13:26:08

+0

感謝您的編輯 - 看起來您的問題是,當您使用第二個表單將數據行添加到數據源時,datagridview不會反映這些變化,即使使用.Refresh()命令?我不認爲你現在可以發表評論(由於低聲譽),所以也許只是更新你的問題。如果這是你的問題,那麼很容易解決。 – 2012-04-21 13:27:31

回答

2

變化問題的DataTable沒有體現在DataGridView是很常見的。問題在於大多數數據表和表適配器實現不會引起DataGridView知道何時更新自己的事件。

.REFRESH()不解決問題,因爲它只是重繪客戶區,並且不會重新查詢數據源 - 底層DataGridView不知道任何改變,因此與之前完全相同重繪。

通常定爲這是復位數據源。

dataGridView1.DataSource = null; 
// Your datatable goes in the place of newDataSource 
dataGridView1.DataSource = newDataSource; 

你也可以這樣做:

dataGridView1.DataSource = typeof(List); 
dataGridView1.DataSource = newDataSource; 

這將讓任何自動生成列。

你也可以通過使用BindingSource來解決這個問題 - 它可能不會自行解決問題,因爲綁定源也依賴於列表已更改的事件,但可能意味着可以避免網格中任何奇怪的閃爍。