2

フォームのロードイベントでテーブルコレクションで満たされたデータグリッドビューがあり、ユーザーが入力したフォームもあり、テーブルのonclickイベントに新しい行を追加します。新しい行をに追加した後にデータグリッドビューを更新したいと思いますテーブル、バインディングデータソースにバインドされた 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 に追加しますが、ユーザーが追加をクリックすると、データベースに追加された最新の行を簡単に追加するだけで済みます。

新しい行がdatagridviewに追加されることを望みます そして、よろしくお願いします

4

1 に答える 1

2

DataTableに変更が反映されないという問題DataGridViewは非常に一般的です。問題は、ほとんどのデータテーブルとテーブルアダプタの実装では、リッスンして自分自身を更新するタイミングを知るためListChangedのイベントが発生しないことです。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。バインディングソースはリスト変更イベントにも依存しているため、それだけでは問題を解決できない可能性がありますが、グリッド内の奇妙なちらつきを回避できる可能性があります。

于 2012-04-21T13:34:30.423 に答える