2010-08-27 9 views
11

Ich kratze mich am Kopf über etwas ziemlich dummes aber anscheinend schwer.Daten in DataView.RowFilter vergleichen?

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

Das Ergebnis ist dieses:

nicht '<' Betrieb auf System.String und System.DateTime ausführen kann.

Bitte sagen Sie mir, was der beste Weg, um dieses Problem zu lösen wäre.

Sehr geschätzt!

Antwort

20

Sie müssen Ihre Daten mit #, nicht Apostrophe wickeln.

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

Sie haben Recht, es war die #. Entscheidend ist jedoch, dass das Datumsformat dem Ihrer Systemeinstellungen entspricht. Wie dumm ist das ... also benutze ich jetzt 'startDate.ToShortDateString()'. Danke m8! – Peter

+0

Wusste nicht, dass das Datumsformat den Systemeinstellungen entspricht. Danke, dass du mich und irgendjemanden, der dies liest, erzogen hast! – Dan

+3

@Peter, hier in Großbritannien (wo unser Datumsformat sinnvoll ist - TT/MM/JJJJ) muss ich ENTWEDER "JJJJ/MM/TT" oder das amerikanische Layout verwenden. Wenn ich ToShortDateString mache, hat es ein Flip-Out. Außerdem empfehle ich das "JJJJ/MM/TT" -Format, da es kein lokales Format ist - es sei denn, jemand hat bessere Informationen? – noelicus

3

Je nach Datenanbieter müssen Sie möglicherweise Datumsangaben mit dem Zeichen # statt mit dem Zeichen ' maskieren. Außerdem würde ich Ihre Daten im Format YYYY-MM-DD formatieren, um sicherzustellen, dass sie als Datum korrekt erkannt werden.

8

Dies ist die Lösung. Versuchen Sie dies:

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