数据网格视图到对象列表的单向数据绑定

本文关键字:数据绑定 列表 对象 数据网 网格 视图 数据 | 更新日期: 2023-09-27 18:31:55

我知道有很多类似的问题,我花了很多时间寻找可能的解决方案。但我仍然不确定最简单的方法是什么。

目标是在按时间戳排序的DataGridView中显示LogItems(时间戳、严重性级别、消息),并允许用户按严重性级别筛选项目。

这正是我(不需要)需要的:

  • DataGridView到对象列表/集合的单向数据绑定。无需通过DataGridView编辑对象或通过用户DataGridView添加/删除对象。但是,当我向该基础列表/集合添加或删除对象时,DataGridView应该自动更新。
  • 对象具有时间戳 ( DateTime ),应按此时间戳顺序显示。我不在乎列表本身是否使它们保持排序(像SortedList<T>这样的东西会很好,但它不存在),或者DataGridViewBindingSource是否负责排序。用户无需通过单击列标题来设置排序。
  • 基于单个列的值(严重性)进行简单筛选。

以下是我想出的一些方法:

  • 使用 BindingList<T>,因为基础集合不起作用,因为它不支持排序和筛选。
  • 如果基础集合不支持排序和筛选,则使用 BindingSource 包装某些集合无济于事。
  • 编写一个实现IBindingListView的自定义集合。这看起来很复杂,我只需要IBindingListView提供的功能的子集。而且我太懒了。
  • 使用 BindingListView sourceforge 项目。对于我需要的东西来说,这可能太重了,如果我没有必要,我不想依赖第三方库。
对此

,简单快捷的解决方案是什么?

数据网格视图到对象列表的单向数据绑定

我建议使用DataTable。你会得到你需要的一切。

只需将 DataGridView 设为只读即可防止用户编辑。 当基础数据表更新时,它仍将更新。

干杯

使用

DataTable 是一种选择,但最终我决定使用 sourceforge 的BindingListView,我对此非常满意。

DataTable方法的问题在于,它需要将所有数据从我的自定义对象复制到一个DataTable中,仅用于显示。