none
Comparar un DateTimePicker con una columna de un Datagridview en VB.net RRS feed

  • Pregunta

  • buen dia Expertos, estoy desarrollando un programa en VB.net2012.

    Tengo un problema al cargar colores en las filas de un datagridview(dgproductos) en la tercera columna están las fechas, las cual la comparo con un DateTimePicker(llamado dtFechaActual) le hago un for para que recorra todo el datagridview y la primera condicion (>) que es el color verde me queda perfecto igualmente la segunda condicion (<) , pero la tercera condicion cuando le aplico la igualdad (=) no me selecciona el color naranja sale colo negro no entiendo bien porque si el datetimepicker y la fecha de esa fila de la columna que estan en fecha no pueden tener una igualdad este es el codigo que le aplico

        Sub listadoColores()
            Try
                For i = 0 To dgProductos.RowCount - 1
                    If dgProductos.Rows(i).Cells(3).Value > dtFechaActual.Value Then
                        dgProductos.Rows(i).DefaultCellStyle.ForeColor = Color.Green

                    ElseIf dgProductos.Rows(i).Cells(3).Value < dtFechaActual.Value Then
                        dgProductos.Rows(i).DefaultCellStyle.ForeColor = Color.Red

                    ElseIf dgProductos.Rows(i).Cells(16).Value = dtFechaActual.Value Then
                        dgProductos.Rows(i).DefaultCellStyle.ForeColor = Color.Orange
                    End If
                Next
            Catch ex As Exception
                MsgBox("Error en la operación por: " & ex.Message)
            End Try
        End Sub

    si alguien me podria dar una mano se le agradeceria...

    martes, 15 de enero de 2019 15:10

Respuestas

  • por su puesto que tiene que ver, como te decía estas comparando un DateTime que viene de un control DateTimePicker con un valor Date, la diferencia es que el primero tiene este formato 15/01/2019 17:50:00 y el segundo este formato 15/01/2019. Lo que no es lo mismo.

    Si quieres comparar solo fechas deberías usar en vez de 

    dtFechaActual.Value

    Usar 

    dtFechaActual.Value.Date

    Ahora si quieres comparar fecha y hora entonces debes cambiar el origen del dato y obligar a escribir fecha y hora

      Private _fechaValidez As DateTime
        Public Property fechaValidez() As DateTime
            Get
                Return _fechaValidez
            End Get
            Set(ByVal value As DateTime)
                _fechaValidez = value
            End Set
        End Property

    Por su puesto que podrias hacer una validación antes.

    Mira este ejemplo: Code

    Espero te sirva. Saludos

    • Marcado como respuesta mario gr miércoles, 16 de enero de 2019 15:21
    martes, 15 de enero de 2019 20:54

Todas las respuestas

  • Hola, yo revisaría con un punto de interrupción en esta linea:

    ElseIf dgProductos.Rows(i).Cells(16).Value = dtFechaActual.Value Then

    revisaría que esta comparando, es decir que valor tiene esta celda.

    Datetimepicker.Value devolverá la fecha y hora seleccionada: DateTimePicker.Value

    entonces que valor tiene dgProductos.Rows(i).Cells(16).Value?

    Quizás estas comparando formato fecha con formato fecha y hora y esto puede no ser igual.

    Espero te sirva. Saludos.-

    martes, 15 de enero de 2019 15:28
  • hola ramiro ledesma,

    Sub listadoColores()
            Try
                For i = 0 To dgProductos.RowCount - 1
                    If dgProductos.Rows(i).Cells(3).Value > dtFechaActual.Value Then
                        dgProductos.Rows(i).DefaultCellStyle.ForeColor = Color.Green

                    ElseIf dgProductos.Rows(i).Cells(3).Value < dtFechaActual.Value Then
                        dgProductos.Rows(i).DefaultCellStyle.ForeColor = Color.Red

                    ElseIf dgProductos.Rows(i).Cells(3).Value = dtFechaActual.Value Then
                        dgProductos.Rows(i).DefaultCellStyle.ForeColor = Color.Orange
                    End If
                Next
            Catch ex As Exception
                MsgBox("Error en la operación por: " & ex.Message)
            End Try
        End Sub

    Como me mencionas acabo de ingresarlo en la columna 3, igual no me sale el color naranja, el dato que tiene la columna 3 de la grilla esta en (Date) 

        Private _fechaValidez As Date
        Public Property fechaValidez() As Date
            Get
                Return _fechaValidez
            End Get
            Set(ByVal value As Date)
                _fechaValidez = value
            End Set
        End Property

    esto tendria algo que ver? 


    martes, 15 de enero de 2019 15:35
  • por su puesto que tiene que ver, como te decía estas comparando un DateTime que viene de un control DateTimePicker con un valor Date, la diferencia es que el primero tiene este formato 15/01/2019 17:50:00 y el segundo este formato 15/01/2019. Lo que no es lo mismo.

    Si quieres comparar solo fechas deberías usar en vez de 

    dtFechaActual.Value

    Usar 

    dtFechaActual.Value.Date

    Ahora si quieres comparar fecha y hora entonces debes cambiar el origen del dato y obligar a escribir fecha y hora

      Private _fechaValidez As DateTime
        Public Property fechaValidez() As DateTime
            Get
                Return _fechaValidez
            End Get
            Set(ByVal value As DateTime)
                _fechaValidez = value
            End Set
        End Property

    Por su puesto que podrias hacer una validación antes.

    Mira este ejemplo: Code

    Espero te sirva. Saludos

    • Marcado como respuesta mario gr miércoles, 16 de enero de 2019 15:21
    martes, 15 de enero de 2019 20:54
  • Buenas Ramiro Ledesma lo que me ayudo es que al final tenia que ponerle el (.date) a los DateTiemPicker gracias por la ayuda, ,me quedo de esta forma

    Sub listadoColores()
            Try
                For i = 0 To dgProductos.RowCount - 1
                    If dgProductos.Rows(i).Cells(3).Value > dtFechaActual.Value.Date Then
                        dgProductos.Rows(i).DefaultCellStyle.ForeColor = Color.Green

                    ElseIf dgProductos.Rows(i).Cells(3).Value < dtFechaActual.Value.Date Then
                        dgProductos.Rows(i).DefaultCellStyle.ForeColor = Color.Red

                    ElseIf dgProductos.Rows(i).Cells(3).Value = dtFechaActual.Value.Date Then
                        dgProductos.Rows(i).DefaultCellStyle.ForeColor = Color.Orange
                    End If
                Next
            Catch ex As Exception
                MsgBox("Error en la operación por: " & ex.Message)
            End Try
        End Sub

    miércoles, 16 de enero de 2019 15:23