Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: nolasco281 en 16 Mayo 2015, 01:35 am



Título: Problema al mostrar fecha sin hora.
Publicado por: nolasco281 en 16 Mayo 2015, 01:35 am
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
(http://1.bp.blogspot.com/-nmLfu94FryI/VVZ_t1V6JZI/AAAAAAAAA4w/4LUMAM0wvA0/s1600/Fechas.png)

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
  1. 'Declaracion de la variable
  2. Dim fecCompa As Date
  3. fecCompa = DateTime.Today.AddDays(0) '.ToString(("MM-dd-yyyy"))
  4.  
  5. 'Este es mi Insert
  6. Dim comando1 As New SqlCommand("Insert into cancelacion(codigoDelPedido, estadoDelPedido, fechaDeCancelacion, horaDeCancelacion," & _
  7.                                               " formaDePago, prioridad, tipoDePedido)" & _
  8.                                               "values (@codigoDelPedido, @estadoDelPedido, @fechaDeCancelacion, @horaDeCancelacion, " & _
  9.                                               "@formaDePago, @prioridad, @tipoDePedido)", con)
  10.  
  11. 'De esta forma la mando a la BD
  12. comando1.Parameters.Add("@fechaDeCancelacion", SqlDbType.Date).Value = fecCompa
  13.  

'Asi defini el campo en la tabla
Código
  1. fechaDeCancelacion DATE NOT NULL,

Saludos.


Título: Re: Problema al mostrar fecha sin hora.
Publicado por: Eleкtro en 16 Mayo 2015, 06:44 am
Prueba cómo hago en este ejemplo:

Código
  1. Dim dt As New DataTable
  2. dt.Columns.Add("columnDate")
  3. dt.Columns("columnDate").DataType = GetType(Date)
  4. dt.Rows.Add(DateTime.Today)
  5. RadGridView1.DataSource = dt.DefaultView
  6.  
  7. Dim column As GridViewDateTimeColumn = CType(RadGridView1.Columns("columnDate"), GridViewDateTimeColumn)
  8. ' column.DataType = GetType(Date)
  9. column.FormatString = "{0:yyyy-MM-dd}"
  10. RadGridView1.BestFitColumns()

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

Saludos


Título: Re: Problema al mostrar fecha sin hora.
Publicado por: nolasco281 en 16 Mayo 2015, 07:12 am
Hola Eleкtro.

Código
  1. Dim tabla3 As New DataTable()
  2. tabla3.Columns.Add("Fecha de Cancelación o Devolución")
  3. tabla3.Columns("Fecha de Cancelación o Devolución").DataType = GetType(Date) 'Obtiene dato como fecha
  4. 'tabla3.Rows.Add(DateTime.Today)
  5.  
  6. Dim column As GridViewDateTimeColumn = CType(dgvCanDev.Columns("Fecha de Cancelación o Devolución"), GridViewDateTimeColumn)
  7. 'column.DataType = GetType(Date)
  8. column.FormatString = "{0:yyyy-MM-dd}" 'Tambien puedo usar {0:dddd, MMM dd, yyyy} {0:dd - MM - yyyy}
  9. dgvCanDev.BestFitColumns()
  10.  
  11. dgvCanDev.Columns("Fecha de Cancelación o Devolución").Width = 210
  12.  

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

(http://1.bp.blogspot.com/-m9dTwfFmim4/VVbO7m9HU0I/AAAAAAAAA5A/mdNMvjzF05Y/s1600/Arreglado.png)

Tengo las siguientes dudas tal vez puedas ayudarme

Yo estuve usando
Código
  1. GridViewDateTimeColumn
y
Código
  1. .FormatString = "{0:yyyy-MM-dd}"

Incluso use el evento CellFormatting y nada

Tambien pero no funciono
Código
  1. 'dgvCanDev.Columns("Fecha de Cancelación o Devolución").FormatString = "{0:dddd, MMM dd, yyyy}"
  2. 'dgvCanDev.Columns("Fecha de Cancelación o Devolución").FormatString = "{0:yyyy/MM/dd}"
  3. '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
  1. Dim column As GridViewDateTimeColumn = CType(RadGridView1.Columns("columnDate"), GridViewDateTimeColumn)

Al igual que esta
Código
  1. RadGridView1.BestFitColumns()

Tambien por que puso comentado
Código
  1. '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.


Título: Re: Problema al mostrar fecha sin hora.
Publicado por: Eleкtro en 16 Mayo 2015, 07:57 am
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.

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



no estoy muy seguro de lo que hace
Código
  1. 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].



Tambien por que puso comentado
Código
  1. '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.



Al igual que esta
Código
  1. 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.



Citar
Se puede obtener el dato hasta despues de convertirlo?

No entiendo a lo que te refieres exactamente.


Saludos!


Título: Re: Problema al mostrar fecha sin hora.
Publicado por: nolasco281 en 16 Mayo 2015, 08:12 am
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
  1. dt.Columns("columnDate")[color=red].DataType = GetType(Date)[/color]

Gracias de nuevo.

Saludos.


Título: Re: Problema al mostrar fecha sin hora.
Publicado por: nolasco281 en 16 Mayo 2015, 10:04 am
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
  1. tabla2.Columns.Add("Hora de entrega").DataType = GetType(DateTime)

Pero me lanza el siquiente error
(http://2.bp.blogspot.com/-64-F_9CmeM0/VVb4j8Mp8VI/AAAAAAAAA5Q/HTSkm_Hf5X0/s1600/Hora.png)

asi que cambie el codigo por
Código
  1. 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.

(http://1.bp.blogspot.com/-cF__5ug13d8/VVb5dpWP9yI/AAAAAAAAA5Y/7eIXSbXgfR4/s1600/Hora1.png)

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

Saludos.





Título: Re: Problema al mostrar fecha sin hora.
Publicado por: Eleкtro en 16 Mayo 2015, 10:52 am
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
  1. try
  2. catch ex as system.reflection.targetinvocationexception
  3.    trace.writeline(ex.innerexcepion)
  4. 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
  1. Using RadGridView1.DeferRefresh()
  2.    ' ...
  3. End Using

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

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

Saludos!


Título: Re: Problema al mostrar fecha sin hora.
Publicado por: nolasco281 en 16 Mayo 2015, 11:24 am
Hola gracias por contestar Elektron

Esto es lo que me sale

(http://2.bp.blogspot.com/-ggDmLRKfnvU/VVcLpAIjoEI/AAAAAAAAA5s/gqrbi569z3o/s1600/S1.png)

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

Código
  1. .DeferRefresh()

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

Muchas gracias por el tiempo Elektron.

Saludos.


Título: Re: Problema al mostrar fecha sin hora.
Publicado por: nolasco281 en 16 Mayo 2015, 23:50 pm
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.

(http://1.bp.blogspot.com/-2JLyJUlpX8M/VVe6igJ4KzI/AAAAAAAAA6A/8NnHKIJV7qg/s1600/Hora012.png)

Si lo resuelvo muestro la solucion.

Saludos.

PD:Si saven como convertir una columna del Gridview TimeSpan a DateTime se los agradeceria