Problema al mostrar fecha sin hora.

Iniciado por nolasco281, 16 Mayo 2015, 01:35 AM

0 Miembros y 1 Visitante están viendo este tema.

nolasco281

Hola como esta,
Mi duda es la siguiente, mando una fecha a la BD pero al momento de mostrarla en VB, en un dataGridview me trae la fecha y hora no sé por qué, ya que en la BD no la muestra

Muestra


No se si debo validar en el Insert el formato de la fecha, o al momento en que se manda a la BD
,o usar alguna funcion del DataGrid (Control telerik) si es que la tiene.

Código (vbnet) [Seleccionar]

'Declaracion de la variable
Dim fecCompa As Date
fecCompa = DateTime.Today.AddDays(0) '.ToString(("MM-dd-yyyy"))

'Este es mi Insert
Dim comando1 As New SqlCommand("Insert into cancelacion(codigoDelPedido, estadoDelPedido, fechaDeCancelacion, horaDeCancelacion," & _
                                              " formaDePago, prioridad, tipoDePedido)" & _
                                              "values (@codigoDelPedido, @estadoDelPedido, @fechaDeCancelacion, @horaDeCancelacion, " & _
                                              "@formaDePago, @prioridad, @tipoDePedido)", con)

'De esta forma la mando a la BD
comando1.Parameters.Add("@fechaDeCancelacion", SqlDbType.Date).Value = fecCompa


'Asi defini el campo en la tabla
Código (sql) [Seleccionar]
fechaDeCancelacion date not null,

Saludos.
Lo que se puede imaginar... se puede programar.

Eleкtro

#1
Prueba cómo hago en este ejemplo:

Código (vbnet) [Seleccionar]
Dim dt As New DataTable
dt.Columns.Add("columnDate")
dt.Columns("columnDate").DataType = GetType(Date)
dt.Rows.Add(DateTime.Today)
RadGridView1.DataSource = dt.DefaultView

Dim column As GridViewDateTimeColumn = CType(RadGridView1.Columns("columnDate"), GridViewDateTimeColumn)
' column.DataType = GetType(Date)
column.FormatString = "{0:yyyy-MM-dd}"
RadGridView1.BestFitColumns()


Nota: La columna debe ser del tipo GridViewDateTimeColumn, si es del tipo GridViewTextBoxColumn no afectará el formato aplicado.

Saludos








nolasco281

#2
Hola Eleкtro.

Código (vbnet) [Seleccionar]
Dim tabla3 As New DataTable()
tabla3.Columns.Add("Fecha de Cancelación o Devolución")
tabla3.Columns("Fecha de Cancelación o Devolución").DataType = GetType(Date) 'Obtiene dato como fecha
'tabla3.Rows.Add(DateTime.Today)

Dim column As GridViewDateTimeColumn = CType(dgvCanDev.Columns("Fecha de Cancelación o Devolución"), GridViewDateTimeColumn)
'column.DataType = GetType(Date)
column.FormatString = "{0:yyyy-MM-dd}" 'Tambien puedo usar {0:dddd, MMM dd, yyyy} {0:dd - MM - yyyy}
dgvCanDev.BestFitColumns()

dgvCanDev.Columns("Fecha de Cancelación o Devolución").Width = 210


Resolvió el problema. Mil gracias llevaban varias horas ya.



Tengo las siguientes dudas tal vez puedas ayudarme

Yo estuve usando
Código (vbnet) [Seleccionar]
GridViewDateTimeColumn
y
Código (vbnet) [Seleccionar]
.FormatString = "{0:yyyy-MM-dd}"

Incluso use el evento CellFormatting y nada

Tambien pero no funciono
Código (vbnet) [Seleccionar]
'dgvCanDev.Columns("Fecha de Cancelación o Devolución").FormatString = "{0:dddd, MMM dd, yyyy}"
'dgvCanDev.Columns("Fecha de Cancelación o Devolución").FormatString = "{0:yyyy/MM/dd}"
'dgvCanDev.Columns("Fecha de Cancelación o Devolución").FormatString = "{0:dd - MM - yyyy}"


Las dudas que tengo es en esta línea no estoy muy seguro de lo que hace
Código (vbnet) [Seleccionar]
Dim column As GridViewDateTimeColumn = CType(RadGridView1.Columns("columnDate"), GridViewDateTimeColumn)

Al igual que esta
Código (vbnet) [Seleccionar]
RadGridView1.BestFitColumns()

Tambien por que puso comentado
Código (vbnet) [Seleccionar]
'column.DataType = GetType(Date)
Se puede obtener el dato hasta despues de convertirlo?

No sabía que se le asignaba el tipo a la columna GridViewDateTimeColumn. No mencionan eso en la documentación de telerik o por lo menos en lo que estuve viendo.

Muchas gracias de nuevo.

Saludos.
Lo que se puede imaginar... se puede programar.

Eleкtro

#3
Cita de: nolasco281 en 16 Mayo 2015, 07:12 AMNo sabía que se le asignaba el tipo a la columna GridViewDateTimeColumn. No mencionan eso en la documentación de telerik o por lo menos en lo que estuve viendo.

Los controles de Telerik son "inteligentes", resuelven el DataType y asignan el tipo de columna más apropiada para mostrar la representación de ese DataType.

Aquí tienes toda la información sobre las columnas:
http://www.telerik.com/help/winforms/gridview-columns.html




Cita de: nolasco281 en 16 Mayo 2015, 07:12 AM
no estoy muy seguro de lo que hace
Código (vbnet) [Seleccionar]
Dim column As GridViewDateTimeColumn = CType(RadGridView1.Columns("columnDate"), GridViewDateTimeColumn)

Una conversión de Type.

Más que nada para seguir buenas prácticas de programación y evitar errores al aplicar el ejemplo que te mostré;
si la columna fuese del tipo GridViewTextBoxColumn (sería así si no resolviese el DataType correctamente) lanzaría una excepción de casteo al intentar convertir, aunque ambas classes hereden de la misma class, GridViewDataColumn/b].




Cita de: nolasco281 en 16 Mayo 2015, 07:12 AM
Tambien por que puso comentado
Código (vbnet) [Seleccionar]
'column.DataType = GetType(Date)

Solo lo puse para dejarte escrito un ejemplo de como puedes obtener y/o asignar el Datatype de los datos de una columna.




Cita de: nolasco281 en 16 Mayo 2015, 07:12 AM
Al igual que esta
Código (vbnet) [Seleccionar]
RadGridView1.BestFitColumns()

Ese método solamente con leer el nombre se explica por si mismo, ¿por qué no utilizas la característica IntelliSense de VisualStudio para averiguar lo que hace?, pasa el puntero del ratón por encima del nombre del método para visualizar la descripción en la documentación XML...

Ssirve para ajustar automaticamente la longitud de las columnas adaptándose al tamaño de los datos de las celdas.




CitarSe puede obtener el dato hasta despues de convertirlo?

No entiendo a lo que te refieres exactamente.


Saludos!








nolasco281

IntelliSense ya lo active mil gracias de nuevo por la explicacion ;-) ;-)

vi el link que me mandaste de telerik lo habia visto pero lo que no menciona esto

Código (vbnet) [Seleccionar]
dt.Columns("columnDate")[color=red].DataType = GetType(Date)[/color]

Gracias de nuevo.

Saludos.
Lo que se puede imaginar... se puede programar.

nolasco281

#5
Hola

Disculpen pero no quise abrir otro hilo

Pero el problema es ahora es con la hora quise poner Datetime tambien probe con Date

Código (vbnet) [Seleccionar]
tabla2.Columns.Add("Hora de entrega").DataType = GetType(DateTime)

Pero me lanza el siquiente error


asi que cambie el codigo por
Código (vbnet) [Seleccionar]
tabla2.Columns.Add("Hora de entrega").DataType = GetType(TimeSpan)
Corrio la aplicacion pero al llevar a esa columna por el scroll me sale este error.



Mil disculpas enserio pense que seria lo mismo con hora solo que usaria datetime

Saludos.



Lo que se puede imaginar... se puede programar.

Eleкtro

#6
La excepción Reflection.TargetInvocation es lanzada por un método invocado mediante Reflection, es una excepción general por lo tanto es imposible averiguar la causa del error con la información que has dado, en la imagen que has mostrado puedes copiar los detalles adicionales de la excepción, MUESTRA ESO.

Si prefieres controlar la excepción mediante código, para ver lo que ha sucedido realmente, captura la excepción interna:

Código (vbnet) [Seleccionar]
try
catch ex as system.reflection.targetinvocationexception
   trace.writeline(ex.innerexcepion)
end try


De todas formas, las modificaciones que le hagas al control, hazlas dentro del bloque DeferRefresh que te indiqué en otro post:
Código (vbnet) [Seleccionar]
Using RadGridView1.DeferRefresh()
   ' ...
End Using


Si eso no resuelve el problema, después de asignar el datatype, asígnale el formato de cadena deseado:
Código (vbnet,4) [Seleccionar]
Using RadGridView1.DeferRefresh()
   RadGridView1.Columns.Add("Hora de entrega")
   RadGridView1.Columns("Hora de entrega").DataType = GetType(TimeSpan)
   RadGridView1.Columns("Hora de entrega").FormatString = "{0:hh:mm:ss}"
End Using


Si eso tampoco resuelve el problema, deberías formular tu duda en el foro de soporte de Telerik.

Saludos!








nolasco281

#7
Hola gracias por contestar Elektron

Esto es lo que me sale



No me funciono el Try ni el load del form ni cuando se llena el DataGrivew

Código (vbnet) [Seleccionar]
.DeferRefresh()

Publicare la consulta en los foros de telerik edito este comentario cuando ellos me comenten.

Muchas gracias por el tiempo Elektron.

Saludos.
Lo que se puede imaginar... se puede programar.

nolasco281

Hola como esta la razon por la que me salen el error es por que a la funcion TimeSpan no se le puede dar formato tanto en Windonws como en el control timepicker de Telerik eso causa el error.

Ahora bien despues de estar leyendo un poco veo que se le puede dar formato convirtiendo el TimeSpan en DateTime.

Lo raro y que no entiendo es que tengo dos controles TimePicker uno me captura solo la hora minutos y segundo encambio el otro me muestra los milesegundos.



Si lo resuelvo muestro la solucion.

Saludos.

PD:Si saven como convertir una columna del Gridview TimeSpan a DateTime se los agradeceria
Lo que se puede imaginar... se puede programar.