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查询来绑定数据,我不想为了显示一行被删除而再次查询,我认为这会降低性能。
我认为解决方案取决于您如何绑定数据。如果你绑定了一个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中删除用户选择的行。
-
使用你的DGV的DataGridViewRowCollection而不是DataTable的DataRowCollection。DataGridViewRow具有Selected属性,该属性指示一行是否被选中。
-
一旦你确定要删除一行,你可以使用DataGridViewRowCollection的Remove方法从网格中删除项目,例如:YerDataGridView.Rows.Remove(row)
-
注意,在这一点上,虽然项目从DGV中删除,但它仍然没有从Access DB中删除。你需要调用TableAdapter Update方法在你的DataSet/DataTable上提交删除到DB,例如:YerTableAdapter.Update(YerDataSet)
我通常只在从DGV中删除所有要删除的项后才调用Update一次以提交更改。