2010-08-27 14 views
11

मैं अपने सिर को खरोंच कर रहा हूं बल्कि बेवकूफ लेकिन स्पष्ट रूप से मुश्किल है।DataView.RowFilter में तिथियों की तुलना करें?

System.String और System.DateTime पर नहीं जा सकता '<' आपरेशन:

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

परिणाम यह है।

कृपया मुझे बताएं कि इस समस्या को हल करने का सबसे अच्छा तरीका क्या होगा।

बहुत सराहना की!

उत्तर

20

आपको अपनी तिथियों को # के साथ लपेटने की ज़रूरत है, न कि apostrophes।

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

आप सही हैं # यह सही था। लेकिन महत्वपूर्ण हिस्सा यह है कि डेटफॉर्मेट को आपके सिस्टम सेटिंग्स का उपयोग करने के समान ही होना चाहिए। यह कितना बेवकूफ है ... तो अब मैं 'startDate.ToShortDateString() 'का उपयोग कर रहा हूं। धन्यवाद एम 8! – Peter

+0

तारीख प्रारूप मिलान प्रणाली सेटिंग्स के बारे में नहीं पता था। मुझे और किसी और को शिक्षित करने के लिए धन्यवाद जो इसे पढ़ता है! – Dan

+3

@ पीटर, यहां यूके में (जहां हमारी तिथि प्रारूप समझ में आता है - डीडी/एमएम/yyyy) मुझे किसी भी "yyyy/MM/dd" या अमेरिकी लेआउट का उपयोग करना होगा। अगर मैं ToShortDateString करता हूं तो उसके पास फ्लिप-आउट होता है। इसके अलावा, मैं "yyyy/MM/dd" प्रारूप की अनुशंसा करता हूं क्योंकि यह लोकेल विशिष्ट प्रारूप नहीं है - जब तक कि किसी के पास कोई बेहतर जानकारी न हो? – noelicus

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") + 
     "#) "; 
संबंधित मुद्दे