DataGridView.Rows.RemoveAt(int index) doesn't remove row

本文关键字:row remove doesn RemoveAt Rows int index DataGridView | 更新日期: 2023-09-27 18:09:25

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

上面的代码删除当前选定的行(只允许选择1行),但我仍然可以看到行保留在datagridview。我是否错过了更新或使其无效?

ps: dataGridView1是数据绑定。

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

DataGridView.Rows.RemoveAt(int index) doesn't remove row

我认为解决方案取决于您如何绑定数据。如果你绑定了一个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<FooType>;
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中删除。你需要调用TableAdapter Update方法在你的DataSet/DataTable上提交删除到DB,例如:YerTableAdapter.Update(YerDataSet)

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