2010-11-24 28 views
6

Estoy cargando datos de mi base de datos en una DataTable, y una de las columnas es un campo de fecha.Cambiar el tipo de datos de la columna en DataTable desde DateTime a String

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)) 
{ 
    SqlCommand cmd = conn.CreateCommand(); 
    cmd.CommandText = "MySP"; 
    cmd.CommandType = CommandType.StoredProcedure; 

    conn.Open(); 
    using (SqlDataReader rdr = cmd.ExecuteReader()) 
    { 
     dt.Load(rdr); 
    } 
} 

me gustaría dar formato a esa columna para que en lugar de contener una fecha completa, será formateado como "MM/DD/AAAA".

He intentado recorrer cada fila de la tabla y cambiar la celda de esa columna, pero aparece un error que dice que la cadena no es un objeto DateTime válido.

Traté de cambiar la columna DateType a una cadena, pero recibo un error que dice que no puedo cambiar el DateType después de que se llene la tabla.

¿Cómo puedo hacer esto? Esto parece algo tan simple, pero estoy teniendo tantos problemas con eso.

+0

dónde y cómo se está utilizando esta tabla de datos? Diría que debería formatear la fecha cuando la usa en su capa de IU (por ejemplo, como fuente de datos) pero no antes. –

+0

Lo estoy vinculando a un GridView. Las columnas son dinámicas, por lo que no puedo formatearla en la Vista de diseño. El índice de la columna también puede ser diferente, por lo que tampoco es tan fácil como cambiarlo en el evento RowDataBound. – Steven

+0

Si ese es el caso, puede hacer que la columna escriba una cadena y formatearla antes de insertar los valores. –

Respuesta

10

Como solución se podría crear una nueva columna y almacenar la fecha formateada allí:

dt.Columns.Add("DateStr"); 

foreach (DataRow dr in dt.Rows) 
{ 
    dr["DateStr"] = string.Format("{0:MM/dd/yyyy}", dr["OriginalDate"]); 
} 
2

No se puede formatear un valor de DateTime struct. No lo pienses de esa manera. Su propósito es mantener un valor que represente:

un instante en el tiempo, típicamente expresado como una fecha y hora del día.

Solo puede especificar el formato cuando convierta el valor de esa instancia en una cadena. Deje su esquema DataTable como está. Donde sea que necesite formatearlo, mire algunos de los formats que puede usar con el método ToString(string).

4

Cambiar el procedimiento almacenado a emitir el campo en una cadena mediante CONVERT ...

SELECT CONVERT(varchar, DateFieldName, 101) AS DateFieldNameFormatted 

El 101 es el código de formato de dd/mm/aaaa (ver enlace para otros formatos de códigos /)

Cuestiones relacionadas