【问题标题】:Dataview custom filter on time component of datetime column日期时间列的时间组件上的 Dataview 自定义过滤器
【发布时间】:2021-02-15 10:54:49
【问题描述】:

我有 2 列的数据网格视图。

| ID | DateCol             |
| 5  | 2021-02-12 03:05:01 |
| 4  | 2021-02-15 02:05:01 |
| 3  | 2021-02-15 05:05:01 |
| 2  | 2021-02-13 05:05:01 |
| 1  | 2021-02-12 05:05:01 |

关于将自定义过滤器应用于集合视图:

BindingListCollectionView collectionView = CollectionViewSource.GetDefaultView(ItemsSource);
collectionview.CustomFilter = $"CONVERT(DateCol, 'System.String') >= #05:00:00#";

我只得到一个结果:

   | 3  | 2021-02-15 05:05:01 |

似乎正在使用今天的 DateTime,即 2 月 15 日。如何仅根据时间进行过滤?

预期输出是所有 3 个项目,其中的时间分量大于 0500。

    | 3  | 2021-02-15 05:05:01 |
    | 2  | 2021-02-13 05:05:01 |
    | 1  | 2021-02-12 05:05:01 |

谢谢

【问题讨论】:

    标签: c# wpf dataview datagridviewcolumn


    【解决方案1】:
    this.defaultView.Filter =
                w =>
                {
                    var dateTimeColumn = w as DataTimeColumn;
                    return dateTimeColumn?.DateTimeCol.Hour > 5;
                };
    
            this.defaultView.Refresh();
    

    当您使用 ICollectionView 作为 DataGrid 的 ItemsSource 时,您可以使用上述代码实现过滤。

    【讨论】:

    • 在 BindingListCollectionView 上使用过滤器时,我得到“不支持指定的方法”,也找不到 DateTimeColumn .. 它的命名空间是什么
    • @ThomasBecker 不要混淆,这里的 DataTimeColumn 是我创建的类名,它有两个属性,一个是 int 类型的 Id,另一个是 DateTimeCol,它是 DateTime 类型跨度>
    【解决方案2】:

    试试这个:

    BindingListCollectionView collectionView = CollectionViewSource.GetDefaultView(ItemsSource) as BindingListCollectionView;
    collectionView.CustomFilter = $"SUBSTRING(CONVERT(DateCol, 'System.String'), 11, 8) >= #05:00:00#";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 2020-12-29
      • 2019-03-21
      • 2016-07-21
      • 2016-07-20
      • 1970-01-01
      相关资源
      最近更新 更多