admin

设置datagrid的Itemsource

sql

通过此代码,我将设置我的datagrid的Itemsource。但是我得到了更多的wpf控件,例如,从一个时间范围内,它需要更多的数据网格来进行过滤。我可以为此编写一个新查询,但是由于数据已经可用,因此这似乎不必要,我只需要过滤它即可。但是,什么是最好的方法呢?

我能得到的任何帮助,我们将不胜感激!

DateTime dateStart = CalenderSearch.SelectedDates.First();
DateTime dateEnd = CalenderSearch.SelectedDates.Last();

ObjectQuery<Fouten> fouten = eventsEntities.Foutens;

                var query =
                (from fout in fouten
                 where dateStart <= fout.Datum && dateEnd >= fout.Datum && fout.Rapporten.Treinen.NameTrein == trein.NameTrein
                 orderby fout.Datum, fout.Time


                 select new
                 {
                     Datum = fout.Datum,
                     Time = fout.Time,
                     FoutCode = fout.FoutCode,
                     Omschrijving = fout.Omschrijving,
                     Teller = fout.Teller,
                     Module = fout.Module,
                     FoutId = fout.FoutId

                 }).AsEnumerable().Select(x => new Fouten
                 {
                     Datum = x.Datum,
                     Time = x.Time,
                     FoutCode = x.FoutCode,
                     Omschrijving = x.Omschrijving,
                     Teller = x.Teller,
                     Module = x.Module,
                     FoutId = x.FoutId
                 }).ToList();

if (query.Count == 0)
                    foutensDataGrid.ItemsSource = null;
                else
                    foutensDataGrid.ItemsSource = query;

阅读 176

收藏
2021-06-07

共1个答案

admin

在WPF中,ItemsSource在GUI元素中用作的每个集合都有一个ICollectionView关联。
ICollectionView具有类型为的Filter属性Predicate<object>

如果您设置了该值FilterRefresh()随后调用,则DataGrid将更新自身以仅显示Filter返回true的项目。

一个如何使用此示例:

var collectionView = CollectionViewSource.GetDefaultView(foutensDataGrid.ItemsSource);
collectionView.Filter = o => {
    var fouten = o as Fouten;
    //do your filtering, e.g.
    return fouten.Datum <= dateEnd && fouten.Datum >= dateStart;
}
collectionView.Refresh();
2021-06-07