c# - 过滤项目来源

标签 c# sql wpf linq itemssource

通过这段代码,我设置了数据网格的 ItemsSource。但是,我有更多的 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;

最佳答案

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

如果你设置这个Filter并调用 Refresh() 之后,DataGrid 将自行更新以仅显示 Filter 所在的项目返回真。

如何使用它的示例:

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();

关于c# - 过滤项目来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35765918/

相关文章:

c# - 根据今天的日期格式化通用列表中的日期(WPF、DataGrid、C#)

c# - 从 DirectoryInfo.GetFiles 返回的 FileInfo 没有指向文件?

javascript - C#中设置Cookie并Jquery中访问

sql - (已编辑)给定一个数字限制,编写一个 PostgreSQL 查询,该查询返回求和后值符合该限制的最后一个人的名字

c# - 如何在 WPF ComboBox 中使用 MultiBinding

c# - 如何从 C# Windows 应用程序项目调用 C++ dll

mysql - 在两个表中选择数据

mysql - 处理多态关联: is there such a thing as "too many" LEFT JOIN?

c# - WPF 4 触摸事件获取捏合手势的中心

c# - 为什么我不能在 xaml 中定义网格模板?