A raíz de un artículo que publiqué sobre diversos aspectos de la presentación de datos en el control DataGridView, hace unos días recibí un comentario de un lector, en el que me exponía el problema que tenía para visualizar una tabla de una base de datos mediante este control, ya que en dicha tabla, uno de sus campos contenía valores de fecha, pero almacenados como cadenas, en un estilo yyyymmddhhmm; por ejemplo: 200804251200.
Supongamos que la tabla a la que se hace mención, tiene una estructura y contenido similares a los que vemos en la siguiente imagen.
Una de las posibles formas de abordar el problema que se acaba de plantear consistiría en crear, en primer lugar, una consulta SQL contra la tabla, que convirtiera los valores del campo de tipo cadena a fecha.
SELECT ProductID, Name, Color, ListPrice, CONVERT(datetime, SUBSTRING(SellDate,1,8), 101) AS SellDate FROM Product
Esta consulta la utilizaremos dentro del código de nuestra aplicación para obtener un objeto DataTable que asignaremos al control DataGridView.
using System.Data.SqlClient; //.... private void Form1_Load(object sender, EventArgs e) { // crear la sentencia sql para obtener las filas; // convertir el campo SellDate de tipo cadena a un tipo fecha StringBuilder sbSQL = new StringBuilder(); sbSQL.Append("SELECT ProductID, Name, Color, ListPrice, "); sbSQL.Append("CONVERT(datetime, SUBSTRING(SellDate,1,8), 101) AS SellDate "); sbSQL.Append("FROM Product"); // conectar con la base de datos, // ejecutar la consulta y asignar el resultado al DataGridView SqlConnection cnConexion = new SqlConnection(); cnConexion.ConnectionString = "Data Source=localhost;" + "Initial Catalog=Pruebas;" + "Integrated Security=True"; SqlCommand cmdComando = new SqlCommand(sbSQL.ToString(), cnConexion); SqlDataAdapter daAdaptador = new SqlDataAdapter(cmdComando); DataSet dsDatos = new DataSet(); cnConexion.Open(); daAdaptador.Fill(dsDatos, "Product"); cnConexion.Close(); this.dataGridView1.DataSource = dsDatos.Tables[0]; }
Finalmente, en el evento CellFormatting del DataGridView, detectaremos el momento en el que a la columna SellDate le toca ser formateada, aplicándole el formato de fecha que necesitemos.
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { // cuando la celda corresponda al campo SellDate // formatear el valor de fecha if (this.dataGridView1.Columns[e.ColumnIndex].Name == "SellDate") { e.CellStyle.Format = "dd-MM-yyyy"; } }
Como resultado obtendremos en el DataGridView la columna con el modo de presentación deseado.
Espero que este pequeño truco le resulte de utilidad a quien pueda encontrarse en esta situación.
Un saludo.
ifernandez
Cómo te lo curras master, si señor, gran articulo
lmblanco
Hola Isaac
Muchas gracias campeón, me alegra que te gustara el truco 😎
Un saludote,
Luismi