2012-06-14 50 views
4

說我有一個Infragistic UltraGridFoo酒吧。是否可以過濾表格,以便只顯示FooBar不等於的行?有沒有一種方法可以根據2列的值過濾UltraGrid?

舉例來說,如果我有這樣的數據:

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

過濾器將隱藏在第一和第三行。

+0

在最新的示例中,UltraGridFilterUIProvider控件似乎能夠使用不同的列進行過濾。這個示例被稱爲'Excel風格過濾' – Steve

+0

@zneak由於網格的用戶界面默認不提供此功能,您是如何看待通過用戶界面公開的?如果要在表單上的網格外部添加自己的按鈕或選項,則篩選DataTable而不是網格會更簡單。在這個例子中,你可以在DataTable的DefaultView上設置RowFilter。例如,如果你的DataTable是fooData,你可以使用下面的代碼: fooData.DefaultView.RowFilter =「Foo <> Bar」; – alhalama

+0

@alhalama,我不會通過UI公開它。用戶無法切換此過濾器。 – zneak

回答

5

這是simplier似乎比我相信你不必創建額外的列或東西:

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); 
+0

謝謝,這工作正常! – zneak

+0

嘿,感謝您的解決方案。你碰巧知道這是否也可以在設計者中完成? –

1

你應該能夠從網格設計者那裏做到這一點;

  1. 使用公式[Foo]!=[Bar]爲數據源創建一個新的布爾列。
  2. 將隱藏的列添加到您的網格並設置您的網格的DisplayLayout.Override.RowFilterMode = RowFilterMode.AllRowsInBand
  3. grid.DisplayLayout.Band[].ColumnFilters中,將新的FilterLogicalOperator.And與新列的FilterConditions.Add(FilterComparisionOperator.Equals, true)相加。
+0

我正在使用綁定源連接到'DataTable'。它將工作添加一個未綁定的列到UltraGrid? – zneak

+0

我不認爲可以對來自Grid設計器@zneak的未綁定列採取行動,您可以通過編程方式執行此操作。我不認爲你可以定義一個'FilterCondition'來使用來自多列的值,因此我建議創建一個新的列,說明值是否不相等,然後過濾。 –

+0

是的,您應該可以使用未綁定的列。您可以在InitializeRow事件中設置該值。 –

1

由於您不允許用戶切換此過濾器並使用DataTable,最簡單的解決方案是篩選DataTable而不是網格。

例如,如果你的DataTable是fooData你可以使用follwoing:

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

有趣的想法,我會試試這個。 – zneak

+0

呵呵,現在我回到了代碼中,我意識到其中一列是沒有限制的。 – zneak

+0

如果其中一列是未綁定的列,那麼在綁定網格以包含附加列之前,您可能需要使用Jeff Bridgman建議或修改DataTable的方法。 – alhalama

相關問題