DataGridView清除数据报错:无法删除行,需保留列配置
嘿,我一眼就揪出问题所在了——你不该调用gridNomiColonne.Columns.Clear()啊!这行代码会直接删掉所有列,完全违背了你“保留列设置”的需求,再加上你遇到的Cannot delete data异常,大概率是你的DataGridView绑定了数据源(比如通过BindingSource关联DataTable),直接操作Rows集合才触发了这个错误。
下面分两种场景给你正确的解决方案:
场景1:DataGridView绑定了数据源(比如BindingSource/DataTable)
如果你的DataGridView是通过数据源绑定的,绝对不要直接操作DataGridView的Rows集合,应该去清空数据源本身:
// 假设你的绑定源是bindingSource1 bindingSource1.Clear(); // 如果是直接绑定DataTable,就清空DataTable yourDataTable.Clear();
这样操作既会清空所有行数据,又能完整保留你设置的所有列(包括那个DataGridViewComboBoxColumn的下拉选项、样式等配置)。
场景2:DataGridView未绑定数据源(手动添加列)
如果是手动添加的列,只需要清空行就够了,绝对不要碰Columns.Clear():
gridNomiColonne.Rows.Clear(); // 删掉那行Columns.Clear()的代码!
为什么会出现那个异常?
你看到的System.ArgumentException: Impossibile cancellare questo elenco(无法删除此列表)错误,是因为当DataGridView绑定数据源时,它的Rows集合其实是数据源的视图(比如DataView),直接调用Rows.Clear()会尝试修改数据源,但可能数据源存在约束(比如外键关联),或者框架要求你必须通过数据源本身来做修改,而不是直接操作DataGridView的行集合。
另外补充一句:清空行数据完全不会影响DataGridViewComboBoxColumn的下拉选项配置,只要你不修改Columns集合,这些设置都会原封不动保留下来。
内容的提问来源于stack exchange,提问作者Simone Spagna

