数据网格视图到对象列表的单向数据绑定
本文关键字:数据绑定 列表 对象 数据网 网格 视图 数据 | 更新日期: 2023-09-27 18:31:55
我知道有很多类似的问题,我花了很多时间寻找可能的解决方案。但我仍然不确定最简单的方法是什么。
目标是在按时间戳排序的DataGridView
中显示LogItems
(时间戳、严重性级别、消息),并允许用户按严重性级别筛选项目。
这正是我(不需要)需要的:
DataGridView
到对象列表/集合的单向数据绑定。无需通过DataGridView
编辑对象或通过用户DataGridView
添加/删除对象。但是,当我向该基础列表/集合添加或删除对象时,DataGridView
应该自动更新。- 对象具有时间戳 (
DateTime
),应按此时间戳顺序显示。我不在乎列表本身是否使它们保持排序(像SortedList<T>
这样的东西会很好,但它不存在),或者DataGridView
或BindingSource
是否负责排序。用户无需通过单击列标题来设置排序。 - 基于单个列的值(严重性)进行简单筛选。
以下是我想出的一些方法:
- 使用
BindingList<T>
,因为基础集合不起作用,因为它不支持排序和筛选。 - 如果基础集合不支持排序和筛选,则使用
BindingSource
包装某些集合无济于事。 - 编写一个实现
IBindingListView
的自定义集合。这看起来很复杂,我只需要IBindingListView
提供的功能的子集。而且我太懒了。 - 使用
BindingListView
sourceforge 项目。对于我需要的东西来说,这可能太重了,如果我没有必要,我不想依赖第三方库。
,简单快捷的解决方案是什么?
我建议使用DataTable。你会得到你需要的一切。
只需将 DataGridView 设为只读即可防止用户编辑。 当基础数据表更新时,它仍将更新。
干杯
使用
DataTable
是一种选择,但最终我决定使用 sourceforge 的BindingListView
,我对此非常满意。
DataTable
方法的问题在于,它需要将所有数据从我的自定义对象复制到一个DataTable
中,仅用于显示。