2016-03-12 86 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