DataGridView.Rows.RemoveAt(int index)不会删除Windows窗体中的行?

int i = dataGridView1.CurrentRow.Index; dataGridView1.Rows.RemoveAt(i); 

上面的代码用于删除当前选中的行(仅允许选择1行),但我仍然可以看到该行保留在datagridview中。 我错过了更新或无效吗?

ps:dataGridView1是数据绑定的。

ps2:我使用linq查询绑定数据,我不想再次查询只是为了显示一行被删除,我认为它会降低性能。

我认为解决方案取决于您如何绑定数据。 如果要绑定BindingList,则RemoveAt()方法会删除处理所有内容,而不必刷新DataGridView。

试试下面看看……

 dataGridView1.Refresh(); 

或重新绑定数据,看看..

 dataGridView1.DataSource = myDataSource; dataGridView1.Refresh(); 

从数据源中删除该项,然后再次绑定。

由于数据来自linq,在绑定之前,你可以这样做:

 var result = fooLinq.ToList(); dataGridView1.DataSource = result; //to remove and bind again var result = dataGridView1.DataSource as List; result.RemoveAt(fooIndex); dataGridView1.DataSource = result; 

如果我理解正确,您希望从DGV中删除用户选择的行。

  1. 使用DGV的DataGridViewRowCollection而不是DataTable的DataRowCollection。 DataGridViewRow具有Selected属性,该属性指示是否选择了行。

  2. 一旦确定要删除行,就可以使用DataGridViewRowCollection的Remove方法从网格中删除该项,例如YerDataGridView.Rows.Remove(row)

  3. 请注意,此时,虽然该项目已从DGV中删除,但它仍未从Access DB中删除。 您需要在DataSet / DataTable上调用TableAdapter Update方法以提交对数据库的删除,例如YerTableAdapter.Update(YerDataSet)

我通常会在删除所有要从DGV删除的项目后调用Update一次提交更改。