2016-10-05 209 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