2010-08-27 30 views
11

Me estoy rascando la cabeza por algo bastante estúpido aunque aparentemente difícil.¿Comparar las fechas en DataView.RowFilter?

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

El resultado es este:

No se puede realizar '<' operación en System.String y System.DateTime.

Por favor dígame cuál sería la mejor manera de resolver este problema.

¡Muy apreciado!

Respuesta

20

Debe ajustar sus fechas con #, no apóstrofes.

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

Tiene razón, era el #. Pero la parte crucial es que el formato de fecha debe ser el mismo que el que usa la configuración de su sistema. Qué estúpido es eso ... así que ahora estoy usando 'startDate.ToShortDateString()'. Gracias m8! – Peter

+0

No sabía acerca de la configuración del sistema de coincidencia de formato de fecha. ¡Gracias por educarme a mí y a cualquier otra persona que lea esto! – Dan

+3

@Peter, aquí en el Reino Unido (donde nuestro formato de fecha tiene sentido - dd/mm/aaaa) Tengo que usar "DISPUÉS/MM/dd" o el diseño americano. Si hago ToShortDateString, entonces tiene un flip-out. Además, recomiendo el formato "aaaa/MM/dd", ya que no es un formato específico de configuración regional, a menos que alguien tenga una mejor información. – noelicus

3

Dependiendo de su proveedor de datos, puede necesitar escaparse fechas con el carácter # en lugar del carácter '. Además, formatearía sus fechas en el formato YYYY-MM-DD para asegurar que pueda reconocerse como una fecha correcta.

8

Esta es la solución. Pruebe esto:

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