【问题标题】:The datetimepicker does not properly filter datagridview datadatetimepicker 没有正确过滤 datagridview 数据
【发布时间】:2018-08-02 10:59:08
【问题描述】:

我遇到了一个导致过滤器工作不正常的错误 - 也就是说,当我更改 datetimepicker 中的值时,datagridview 变为空

我使用的代码是:

private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
   dataGridView1.DataSource = db.Expenses
                                .Where(x => x.Period == dateTimePicker1.Value)
                                .ToList();
}

【问题讨论】:

  • 也许您想使用 >= 或
  • 您的数据库中的Period 字段中究竟包含了什么样的内容?它的数据类型是什么?不管是什么,通过使用 == 你可能会限制它,所以它不太可能匹配任何东西,特别是如果 DB 字段或 datetimepicker 值或两者都涉及时间组件 - 它真的会匹配到确切的第二个?通常使用日期过滤器进行过滤,以便显示所选日期之前或之后的所有日期,而不是完全匹配。您可能还需要考虑在比较之前从两个字段中剥离时间分量
  • 如果 query 没有返回任何内容,则网格将为空。这不是 DateTimePicker 中的错误。 Period 是什么,dateTimePicker1 返回的值是多少?我怀疑您正在尝试加载单个日期的数据,但 PeriodDateTime
  • db.Expenses 是否有您在datetimepicker 中选择的周期?
  • @ershoaib 从描述中可以清楚地看出它没有!否则查询将返回结果。更有趣的是 a) OP 的实际预期功能是什么,以及 b) 字段的确切内容是什么以及采用什么格式。

标签: c# winforms datagridview


【解决方案1】:

试试这个可能对你有帮助

 private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
    {
        dataGridView1.DataSource = db.Expenses
                     .Where(x => x.Period.Day == dateTimePicker1.Value.Day && 
                                 x.Period.Month == dateTimePicker1.Value.Month &&  
                                 x.Period.Year == dateTimePicker1.Value.Year)
                     .ToList();    
       //OR


       dataGridView1.DataSource = db.Expenses
                     .Where(x => x.Period.Date == dateTimePicker1.Value.Date)
                     .ToList();
    }

【讨论】:

  • 我认为您可以删除第一个选项,没有理由选择第二个选项。
  • @ershoaib,非常感谢您的关注和帮助。一切正常
  • 很高兴听到您解决了问题 :)
  • @ADyson,第一种情况是最好的,当用户只需要选择日、月或年或这些的任意组合时,他只需从Where 子句中删除或添加他需要的任何条件:)
  • @ADyson,您绝对在这里,但是任何其他用户都看到了这个答案,如果他/她需要选择以上任何组合的记录,那么它对他/她很有用。无论如何我会改变两者的顺序,并感谢您的支持:)
【解决方案2】:

可能包括比较中的时间。仅比较日期即可解决。

dataGridView1.DataSource = Expenses
             .Where(x => x.Period.Date == dateTimePicker1.Value.Date)
             .ToList();

【讨论】:

  • 肯定不是也需要x.Period.Date 吗?这样做,你就会得到我的支持。
  • 如果时间部分没有存储在数据库中,.Date 将返回一个日期时间,时间部分设置为 00:00:00
  • “如果时间部分没有存储在数据库中”我们不确定,因为 OP 没有回答我们关于它的任何问题。最好是安全的,因为我们知道这段代码只想比较日期,为什么不给出 100% 的确定性。如果你不想更新你的答案,我可以写我自己的版本。
猜你喜欢
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 2020-04-23
相关资源
最近更新 更多