DataGridView与对象列表的单向数据绑定

时间:2013-09-19 15:38:41

标签: c# sorting data-binding datagridview filtering

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

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

这正是我(不)需要的:

  • DataGridView与列表/对象集合的单向数据绑定。无需通过DataGridView编辑对象,也无需用户通过DataGridView添加/删除对象。但是当我向对象列表/集合添加或删除对象时,DataGridView应该会自动更新。
  • 对象具有时间戳(DateTime),并且应按此时间戳排序显示。我不关心列表本身是否对它们进行排序(类似SortedList<T>会很好,但它不存在)或者DataGridViewBindingSource是否负责排序。用户无需通过单击列标题来设置排序。
  • 基于单列(严重性)的值进行简单过滤。

我提出了一些方法:

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

什么是一个简单而快速的解决方案?

2 个答案:

答案 0 :(得分:1)

我建议使用DataTable。你将获得所需的一切。

只需创建DataGridView ReadOnly即可阻止用户编辑。当基础DataTable更新时,它仍会更新。

干杯

答案 1 :(得分:0)

使用DataTable是一种选择,但最后我决定使用sourceforge中的BindingListView代替,我对它非常满意。

DataTable方法存在的问题是需要将自定义对象中的所有数据复制到DataTable中才能显示。