2010-08-27 138 views
11

我正在摸索我的頭,而不是愚蠢但顯然很難。在DataView.RowFilter中比較日期?

DataView dvFormula = dsFormula.Tables[0].DefaultView; 
dvFormula.RowFilter = "'" + startDate.ToString("yyyyMMdd") + "' < EndDate OR EndDate = '19000101'"; 
dvFormula.Sort = "FromDate ASC"; 

結果是這樣的:

無法在System.String和System.DateTime的執行 '<' 操作。

請告訴我解決這個問題的最好方法是什麼。

非常感謝!

回答

20

你需要用#包裹你的日期,而不是撇號。

dvFormula.RowFilter = "#" + startDate.ToString("MM/dd/yyyy") + "# < EndDate OR EndDate = #1/1/1900#"; 
+3

你說得對,它是#。但關鍵部分是dateformat需要與系統設置使用的相同。這是多麼愚蠢...所以現在我使用'startDate.ToShortDateString()'。感謝m8! – Peter 2010-08-27 13:36:14

+0

不知道日期格式匹配系統設置。感謝您教育我和任何閱讀此內容的人! – Dan 2010-08-27 15:47:25

+3

@Peter,這裏在英國(我們的日期格式有意義 - dd/mm/yyyy)我必須使用「yyyy/MM/dd」或美國佈局。如果我做了ToShortDateString,那麼它有一個翻轉。另外,我推薦使用「yyyy/MM/dd」格式,因爲它不是特定於語言環境的格式 - 除非任何人有更好的信息? – noelicus 2012-11-15 16:42:09

3

根據您的數據提供商的不同,您可能需要使用#字符而不是'字符來避開日期。另外,我會以YYYY-MM-DD的格式格式化日期,以確保它能被正確識別爲日期。

8

這是解決方案。試試這個:

filter = " (Date >= #" + 
     Convert.ToDateTime(txtFromDate.Text).ToString("MM/dd/yyyy") + 
     "# And Date <= #" + 
     Convert.ToDateTime(txtToDate.Text).ToString("MM/dd/yyyy") + 
     "#) ";