2016-03-12 90 views
1

我对C#比较陌生,但是学习。我有一个名为Return的表的DGV,Date列是DateOfEntry。我认为设置这将是相当简单的..但我不断得到Operand错误,我不知道为什么。我已经研究了这一点,并没有结束,并尝试了各种方法,但没有运气。下面是我使用的代码,有人可以向我解释我可能做错了什么吗?Winforms C#DataGridView日期过滤器问题

使用和访问.mdb文件为DB

returnsBindingSource.Filter = ("Select * from Returns where DateOfEntry 
between '"+dateTimePicker1.Value.ToString()+"' and 
'"+dateTimePicker2.Value.ToString()+"'"); 
+0

您不应该将select语句指定为'BindingSource.Filter'。它需要[过滤器表达式](https://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression(v = vs.110).aspx)。分配新过滤器时,它将应用于作为绑定源的数据源的数据表中的记录。 –

回答

0

你不应该指定一个SELECT语句作为BindingSource.Filter。它需要遵循这些expression syntax的字符串过滤表达式。

事实上,它是一种客户端过滤机制,它不需要往返于数据库服务器来过滤数据。将过滤器表达式分配给BindingSource.Filter时,该过滤器将应用于基础数据源,例如在DataTable上。

因此,您应该在表单的Load事件中加载数据,然后在过滤器按钮的事件过滤器上加载数据,例如。

日期值应包含在#符号内。例如:

returnsBindingSource.Filter = 
    String.Format("DateOfEntry >= #{0:yyyy/MM/dd}# AND DateOfEntry <= #{1:yyyy/MM/dd}#", 
    dateTimePicker1.Value, 
    dateTimePicker2.Value); 
+1

Reza,这很有道理。感谢您花时间解释代码的基本原理。再次感谢你的帮助。 – Rick