2016-10-05 115 views
0

如何過濾我的DataGrid? 此代碼不起作用:WPF DataGrid過濾器不起作用

public MainWindow() 
    { 
     InitializeComponent(); 

     SetSource(); 
    } 

    private void FilterTextBox_TextChanged(object sender, TextChangedEventArgs e) 
    { 

    } 

    void SetSource() 
    { 
     CollectionViewSource Sorted = new CollectionViewSource() { Source = MainDB.CurDB.Requests }; 
     Sorted.SortDescriptions.Add(new SortDescription("Id", ListSortDirection.Descending)); 
     Sorted.Filter += Sorted_Filter; 
     MainDataGrid.ItemsSource = Sorted.View; 
    } 

    private void Sorted_Filter(object sender, FilterEventArgs e) 
    { 
     e.Accepted = true; 
    } 

例外,我得到:

"System.Windows.Data.BindingListCollectionView" It does not support filtering

更新: 過濾器是現在的工作,但現在我得到以下錯誤,打破列:

System.Windows.Data Error: 40 : BindingExpression path error: 'Changing Date' property not found on 'object' ''RequestsRow' (HashCode=56483442)'. BindingExpression:Path=Changing Date; DataItem='RequestsRow' (HashCode=56483442); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')

當某些單元格保持空時,會出現問題

我的數據集。沒有其他類我有:

問題被替換 「SM ID」 「SM_ID」 解決等

+0

試試這個:'ICollectionView排序= CollectionViewSource.GetDefaultView(MainDB.CurDB.Requests);''而不是'CollectionViewSource Sorted = new CollectionViewSource(){Source = MainDB.CurDB.Requests};' – Pikoh

+0

ICollectionView Sorted = CollectionViewSource.GetDefaultView(MainDB.CurDB.Requests); Sorted.Filter = item => true;拋出異常(「 該方法不支持」) – DenisJNewb

+0

好吧,嘗試'ICollectionView Sorted = CollectionViewSource.GetDefaultView(MainDB.CurDB.Requests.AsEnumerable()); Sorted.Filter = item => true;' – Pikoh

回答

0

試試這個:

List<DataRow> requests = MainDB.CurDB.Requests.Select().ToList(); 
CollectionViewSource Sorted = new CollectionViewSource() { Source = requests }; 
+0

「請求」是數據表 – DenisJNewb

+0

我編輯了帖子... – Michelle

+0

此錯誤的原因:System.Windows.Data錯誤:40:BindingExpression路徑錯誤:'在'object'''RequestsRow'(HashCode = 45629785)'找不到'SM Id'屬性。 BindingExpression:Path = SM Id; DataItem ='RequestsRow'(HashCode = 45629785);目標元素是'TextBlock'(Name ='');目標屬性是'文本'(類型'String')。它打破了DataGrid列「SM Id」,「創建日期」和「更改日期」 – DenisJNewb