我有一个datagridview在表单的load事件上填充了一个表集合,我还有一个由用户填写的表单,并在表onclick事件中添加新行,我想在添加new之后更新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但我只需添加添加到数据库的最新行 简而言之,当用户点击添加时,
我希望将新行添加到datagridview中 并提前谢谢
答案 0 :(得分: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
来解决这个问题 - 由于绑定源也依赖于列表更改事件,它可能无法解决问题,但可能意味着网格中任何奇怪的闪烁都可以要避免。