2012-04-21 18 views
1

フォームのloadイベントにテーブルコレクションが埋め込まれたdatagridviewを持っています。また、ユーザーが入力したフォームがあり、テーブルonclickイベント、私はテーブルに新しい行を追加した後、datagridviewを更新したい、私はsqladapterバインディングデータソースにバインドを使用します。 、テーブルに新しい行を追加した後にdatagridviewの行リストを更新する方法

これは

 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の に追加されることを好きで、DataGridViewには反映されていないDataTableへの変更の問題は非常に一般的です事前に

+0

あなたの問題が何であるかは不明です。あなたはなぜデータベースからの新しい行がdatagridviewに現れないのか尋ねていますか?または、データベースにdatagridviewに追加された行を追加する方法は?他に何か? –

+0

私は、データベースからの新しい行(追加されたonclickイベント)が、datagridviewに追加されない理由を尋ねています。 adapter.fill(dtable)データベースのすべての行を追加しますが、私は新しい行を追加するだけです – tarek

+0

編集のおかげで - あなたの問題は、2番目のフォームを使ってデータソースに行を追加すると、これらの変更は、.Refresh()コマンドを使用しても反映されますか?私は今あなたが(評判が低いために)コメントすることはできないと思うので、おそらくちょうどあなたの質問を更新してください。これがあなたの問題ならば、解決するのは簡単です。 –

答えて

2

をあなたに感謝します。問題は、ほとんどのデータテーブルとテーブルアダプタの実装では、イベントを発生させないということです。これは、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を使用してこれを滑らかにすることもできます。バインディング元がリスト変更イベントにも依存するため、おそらくそれ自体で問題を解決することはできませんが、グリッド内の奇妙なちらつきを避けることができます。

関連する問題