有没有办法根据2列的值过滤UltraGrids?

时间:2012-06-14 15:54:14

标签: c# winforms infragistics ultragrid

说我有一个带有 Foo Bar 列的Infragistic UltraGrid。是否可以过滤表格,以便只显示 Foo Bar 不相等的行?

例如,如果我有这些数据:

Foo  Bar
--------
0.1  0.1
0.1  0.2
0.2  0.2

过滤器会隐藏第一行和第三行。

3 个答案:

答案 0 :(得分:5)

它比看起来更简单,我相信你不必创建额外的列或其他东西:

UltraGridColumn fooColumn = Grid.DisplayLayout.Bands[0].Columns["Foo"];
UltraGridColumn barColumn = Grid.DisplayLayout.Bands[0].Columns["Bar"];
ColumnFilter fooColumnFilter = fooColumn.Band.ColumnFilters[fooColumn];
fooColumnFilter.ClearFilterConditions();
fooColumnFilter.FilterConditions.Add(FilterComparisionOperator.NotEquals, barColumn);

答案 1 :(得分:1)

您应该可以从网格设计师那里做到这一点;

  1. 使用公式[Foo]!=[Bar]为您的数据源创建一个新的布尔列。
  2. 将隐藏列添加到网格并设置网格DisplayLayout.Override.RowFilterMode = RowFilterMode.AllRowsInBand
  3. grid.DisplayLayout.Band[].ColumnFilters中,使用新列的FilterLogicalOperator.And添加新的FilterConditions.Add(FilterComparisionOperator.Equals, true)

答案 2 :(得分:1)

由于您不允许用户切换此过滤器并使用DataTable,因此最简单的解决方案是过滤DataTable而不是网格。

例如,如果您的DataTable是fooData,您将使用以下内容:

fooData.DefaultView.RowFilter = "Foo <> Bar";