C# datetimepicker未正确筛选datagridview数据

C# datetimepicker未正确筛选datagridview数据,c#,winforms,datagridview,C#,Winforms,Datagridview,我面临一个导致过滤器工作不正常的错误——也就是说,当我更改datetimepicker中的值时,datagridview变为空 我使用的代码是: private void dateTimePicker1_ValueChanged(object sender, EventArgs e) { dataGridView1.DataSource = db.Expenses .Where(x => x.Period == date

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

我使用的代码是:

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

试试这个,也许对你有帮助

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

可能是比较中包含了时间。只比较日期就能解决问题

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

也许您想使用>=或者数据库中的
期间
字段中包含什么类型的内容?它的数据类型是什么?不管它是什么,通过使用==您可能在限制它,因此它不太可能匹配任何内容,特别是如果DB字段或datetimepicker值中涉及时间组件,或者两者都涉及,那么它真的会匹配到精确的秒数吗?通常使用日期筛选器进行筛选,以便显示选定日期之前或之后的所有日期,而不是精确匹配的日期。您可能还想考虑在两个字段之间的时间分量进行比较之前,如果查询不返回任何内容,则网格将是空的。这不是DateTimePicker中的错误。什么是
Period
以及
dateTimePicker1
返回的值是多少?我怀疑您正在尝试加载单个日期的数据,但
期间
日期时间
db。费用
有您在
日期时间选择器
中选择的期间?@ershoaib从描述中可以清楚地看出,它没有!否则,查询将返回结果。更有趣的是a)OP的实际预期功能是什么,b)字段的确切内容和格式是什么。要确定它是否也需要是
x.Period.Date
?如果时间部分未存储在数据库中,则会返回一个日期时间,并将时间部分设置为00:00:00“如果时间部分未存储在数据库中,则不会”我们不能确定这一点,因为OP没有回答我们关于它的任何问题。为了安全起见,既然我们知道这段代码只想比较日期,为什么不给出100%的确定性呢。如果您不想更新您的答案,我可以编写自己的版本。我认为您可以删除第一个选项,没有理由选择第二个选项。@ershoaib,非常感谢您的关注和帮助。所有作品都很好很高兴听到你已经摆脱了你的问题:)@ADyson,第一种情况是最好的,当用户只需选择天、月、年或它们的任意组合,然后他只需从
Where
子句:)@ADyson中删除或添加他所需的任何条件,你完全正确,但是任何其他用户都会看到这个答案,如果他/她需要选择上面任意组合的记录,那么它对他/她很有用。无论如何,我会改变两者的顺序,谢谢你的支持:)