C# – 如何在删除行后刷新DataGridView
在我的代码中,我需要在重复间隔后从DataGridView中删除行,所以当计时器到期时我调用以下函数:
private void removeRows(DataGridView dgv) { foreach (DataGridViewRow row in dgv.Rows) { // if some condition holds dgv.Remove(row); } dgv.Refresh(); }
我知道这些行已成功从DataGridView中删除,但它们仍然因任何原因仍保留在显示中。 关于我可能做错的任何提示?
如果已将datagrid绑定到Observable Collection(如果不是,则应该),那么您将需要实现INotifyCollectionChanged接口,以便向侦听器通知动态更改,例如何时添加和删除项目或刷新整个列表。
HTH
你不需要重新绑定数据网格吗?
dgrv.Datasource = [whatever data source]; dgrv.DataBind();
?
有时刷新数据gridview是不够的,它的包含父项也应该刷新。
试试这个:
dgv.Refresh(); // Make sure this comes first dgv.Parent.Refresh(); // Make sure this comes second
您还可以编辑源并将新数据源附加到控件。
如果我理解正确,您希望从DGV中删除用户选择的行。
-
使用DGV的DataGridViewRowCollection而不是DataTable的DataRowCollection。 DataGridViewRow具有Selected属性,该属性指示是否选择了行。
-
一旦确定要删除行,就可以使用DataGridViewRowCollection的Remove方法从网格中删除该项,例如YerDataGridView.Rows.Remove(row)
-
请注意,此时,虽然该项目已从DGV中删除,但它仍未从Access DB中删除。 您需要在DataSet / DataTable上调用TableAdapter Update方法以提交对数据库的删除,例如YerTableAdapter.Update(YerDataSet)
我通常会在删除所有要从DGV删除的项目后调用Update一次提交更改。
如果它是一个数据绑定网格,您应该使用绑定源本身而不是网格。
dataGridView.DataSource = null; dataGridView.Update(); dataGridView.Refresh(); dataGridView.DataSource = SomeDataSource;
希望这个肝脏。
请尝试从绑定源中删除实际项目。