【问题标题】:Manually way to trigger the CustomRowFilterEvent手动触发 CustomRowFilterEvent 的方式
【发布时间】:2013-05-14 17:10:31
【问题描述】:

我们想用 Winforms 过滤 XtraGrid 中的一些行。 RefreshData() 可能需要很长时间(似乎所有行都从 DB 中读取)。

触发事件的方法似乎隐藏在DevExpress的深处,

DevExpress.XtraGrid.Views.Base.ColumnView.RaiseCustomRowFilter(Int32 listSourceRow)

(受保护的内部方法)

如果只知道 Gridview,有什么方法可以触发事件?

我的问题从第一阶段开始。如何获取方法?

MethodInfo methodInfo = gridView.GetType().GetMethod("RaiseCustomRowFilter"); 返回空

【问题讨论】:

  • 你为什么不直接使用数据视图并过滤它?
  • @Stig 我认为 DataView 适用于 cutomers 过滤器。我们还想添加一个不可见的过滤器,它只用于“软删除”项目。 DataView 也可以是一个额外的抽象级别,这个用例是否需要它?
  • DataView 是常规 DataTable 之上的虚拟 DataTable。用于过滤客户端上的数据源。如果您不使用 DataTables 来保存数据,还有其他过滤源的方法。您始终可以使用 DataSource 过滤数据。
  • 这种方法几乎没有问题:我们谈论的是“成长”产品。如果某些东西正在改变数据源,那么获得一个不错的红十字的可能性非常大(即使使用 gridview.BeginDataEdit()...EndDataEdit)。这也可能需要很长时间。额外的 Bindingsource 也将是额外的抽象级别。有趣的是,我们有一个第三方 ORM,我们的数据源是从 bindingsource 继承的。除了它不支持过滤...此外,对此的更改在 DataGridView 中不可见,除非 DGV 正在执行完全刷新。
  • 很遗憾听到这个消息,但是如果您的数据源支持 IBindingListView,它已经有一个过滤器选项。以这种方式过滤(使用合理的数据量)从来没有任何性能问题

标签: c# devexpress


【解决方案1】:

如果您包含 Linq:

DataView dv = TheDataTable.AsDataView();
dv.RowFilter = "mycolumn > 3";
gridControl1.DataSource = dv;

您几乎可以对任何数据源执行此操作

BindingSource bs = new BindingSource;
bs.DataSource = theDataSorce;
bs.Filter = "mycolumn > 3";
gridControl1.DataSource = bs;

这些过滤器对用户不可见。

【讨论】:

    猜你喜欢
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 2017-04-01
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多