【问题标题】:BindingSource filtering - C# WPFBindingSource 过滤 - C# WPF
【发布时间】:2014-02-13 08:36:22
【问题描述】:

我在尝试为我的 DataGridView 创建各种过滤器时遇到了一些麻烦。 基本上我有 4 个按钮,分别是“今天”、“本周”、“本月”、“今年”和“全部显示”。 当我单击任何按钮时,我希望能够只显示与按下的按钮相关的行。日期数据以以下格式存储:“YYYY-MM-DDT00:00:00”,包括破折号和冒号。

使用我的 BindingData 如何正确过滤具有给定格式的条目?如果您需要任何代码,请告诉我。

【问题讨论】:

  • 为什么日期/时间数据存储为文本?如果它实际上是二进制日期/时间,那么您想要做的事情会很容易,但是通过错误地存储数据,您会很难使用它。数据的存储方式是否在您的控制范围内?顺便说一句,您的标题是 WPF,但您声称使用的是 DataGridView,它是一个 WinForms 控件。那是怎么回事?
  • 我对标题的错误,我发送这个时已经晚了,是的,日期和时间的存储方式超出了我的控制范围。

标签: c# visual-studio-2010 data-binding binding datagridview


【解决方案1】:

您可以使用 CollectionView 和 CollectionViewSource 来过滤数据。你可以参考MSDN。 How to: Group, Sort, and Filter Data in the DataGrid Control

希望它能帮到你。

要对 DataGrid 中的数据进行分组、排序和过滤,请将其绑定到支持这些功能的 CollectionView。然后,您可以使用 CollectionView 中的数据,而不会影响底层源数据。集合视图中的更改反映在 DataGrid 用户界面 (UI) 中。 CollectionView 类为实现 IEnumerable 接口的数据源提供分组和排序功能。 CollectionViewSource 类使您能够从 XAML 设置 CollectionView 的属性。

【讨论】:

    【解决方案2】:

    我设法实现了我想要的,我不知道这是否是最好的方法。 (我相信有更好的方法,所以如果有请告诉我我想在这里学习!)

    这是我的代码 sn-p 显示我想要实现的目标:

    private void todayToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DataView dv = _dataSource.Tables[0].DefaultView;    //have a temp dataview to filter data in
            DateTime date = new DateTime();
            date = DateTime.Today;
    
            string expression = date.Year.ToString() + "-" + 
                date.Month.ToString() + "-" + date.Day.ToString();
    
    
    
            dv.RowFilter = string.Format("thedate = #{0}#", expression);
            _tableNameBS.DataSource = dv;
    
            dataGridView1.DataSource = _tableNameBS;
        }
    

    _tableNameBS 是一个 BindingSource,所以现在要删除另一个函数中的过滤器,我只需要调用“_tableNameBS.RemoveFilter”,它就会恢复到原来的状态。

    【讨论】:

      猜你喜欢
      • 2013-07-03
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多