C# GUI 可编辑 DataGridView

标签 c# .net winforms entity-framework datagridview

用户通过 GUI 编辑 DataGridView 必须满足什么条件?比如按F2修改,选择一行删除,或者新增一行?

当我将 DataGridView.DataSource 绑定(bind)到本地集合对象(例如 List<T> )时,我能够执行所有三个操作。

当我将 DataGridView.DataSource 绑定(bind)到 DataTableDataView 时,我还能够以图形方式完成这三个操作。

但是当我将 DataGridView.DataSource 绑定(bind)到 DbSet<T>.ToList<T>()DbSet<T>.ToArray<T>() ( Entity Framework ) 时,我只能修改现有行的非主键值,即使我启用了删除添加通过DataGridView向导函数,具体设置AllowUserToAddRowsAllowUserToDeleteRowstrue。运行时,应用程序不会显示表示能够添加新行的星号 符号。删除行也是不可能的。

但是,数据显示正确。

所以,我很疑惑。上述数据源的哪些特征可能导致 GUI 中的不同行为?

谢谢

最佳答案

DataGridView控件允许用户添加行,如果两者 AllowUserToAddRow设置为 true 并实现底层数据源 IBindingList 返回 AllowNew确实如此。类似的删除规则。

可以看看 AllowUserToAddRowsInternal AllowUserToDeleteRowsInternal 内部方法的源代码。

总而言之,这些是基于数据源的允许操作:

  • List<T> : 编辑
  • BindingList<T> : 添加、编辑、删除(对于添加,T 应该有无参数构造函数)
  • Array : 编辑
  • DataTable : 添加、编辑、删除
  • BindingSource : 取决于 BindingSource 的基础数据源.如果它是 IBindingList 的实现它从中询问,否则如果列表不是 FixedSize然后允许所有操作,否则,只允许编辑。因此,例如,如果您设置 List<T>作为绑定(bind)源的数据源,然后将绑定(bind)源设置为数据 GridView 的数据源,则允许列表进行所有操作。
  • IBindingList : 向实现提出要求。

关于C# GUI 可编辑 DataGridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46750683/

相关文章:

c# - 当其他控件获得焦点时隐藏表单

c# - 什么是 Template10 导航服务的 NavigationServices.FirstOrDefault()?

.net - 在 TextBlock 内对齐 TextBox

vb.net - VB模拟按键

c# - 在此 ASP.NET webforms 页面中以何种顺序执行哪些方法

c# - 检查单元测试中是否抛出参数

.net - 为什么 LINQ to objects 中的 Skip() 没有优化?

c# - 访问修饰符会影响性能吗?

c# - 将 MDI 子项中的菜单项合并到容器的菜单中

c# - 多次单击按钮时如何防止应用程序挂起?