none
Como puedo generar una CONDICION para cambiar los datos de una columna por medio de un TEXBOX? RRS feed

  • Pregunta

  • Buen dia Expertos, Estoy programando en VB.net 2012 y SQLServer 2012

    asi es al comienzo:

    En 1er lugar con este codigo cambio todos los campos a una hora especifica(8:00:00):             

      Dim fechaCondicion As String = Date.Now.ToString("dd/MM/yy 08:00:00")
            If dgHorario.Rows.Count > 0 Then

                    For i As Integer = 0 To dgHorario.Rows.Count - 1
                        dgHorario.CurrentCell = dgHorario.Rows(i).Cells(1)
                        dgHorario.CurrentRow.Cells(1).Value = fechaCondicion
                    Next i
            End If

    Tengo un problema al querer cambiar los datos de una columna(HORA) de un datagridview(dgHorario),pero lo que Necesito es la Condicion y que si los datos son menores a (8:00:00) que se cambien a las (8:00:00) pero los que son mayores que no se cambien sino este con su misma data, este es el codigo que hice pero no me resulta alguien me puede ayudar porfa .

        Dim fechaCondicion As String = Date.Now.ToString("dd/MM/yy 08:00:00")
            Dim Inventor As String
            If dgHorario.Rows.Count > 0 Then
                Inventor = dgHorario.CurrentRow.Cells(1).Value
                If Inventor < fechaCondicion Then
                    For i As Integer = 0 To dgHorario.Rows.Count - 1
                        dgHorario.CurrentCell = dgHorario.Rows(i).Cells(1)
                        dgHorario.CurrentRow.Cells(1).Value = fechaCondicion
                    Next i
                End If
            End If

    de ante mano le agradeceria con su ayuda.gracias

    viernes, 8 de junio de 2018 17:55

Respuestas

  • "mario gr" escribió:

    > Tengo un problema al querer cambiar los datos de una columna(HORA) de un datagridview(dgHorario),
    > pero lo que Necesito es la Condicion y que si los datos son menores a (8:00:00) que se cambien
    > a las (8:00:00) pero los que son mayores que no se cambien sino este con su misma data, este es
    > el codigo que hice pero no me resulta alguien me puede ayudar porfa .
    >
    >    Dim fechaCondicion As String = Date.Now.ToString("dd/MM/yy 08:00:00")
    >
    >    Dim Inventor As String
    >    If dgHorario.Rows.Count > 0 Then
    >       Inventor = dgHorario.CurrentRow.Cells(1).Value
    >       If Inventor < fechaCondicion Then

    Hola, Mario:

    Me imagino que serás consciente de que estás realizando una comparación de datos ALFANUMÉRICOS, por tanto, no me extraña que tengas problemas porque aunque los datos alfanuméricos parezcan una "fecha" (entre comillas), en realidad es una cadena de números, barras diagonales y dos puntos que el compilador los tratará como si fueran letras.

    Si tu intención es comparar una fecha y hora, tienes que trabajar con tipos de datos DateTime en lugar de hacerlo con tipos de datos String. Si tuvieras activada la instrucción Option Strict (lee la "coletilla" que aparece al final de este mensaje), el compilador de Visual Basic no te permitiría realizar la compilación hasta que no hicieras las conversiones explícitas de datos, porque deberías de saber que el valor de la propiedad Value de un objeto DataGridViewCell (dgHorario.CurrentRow.Cells(1).Value) devuelve un valor Object, que para asignárselo a un valor String, Integer, Long, DateTime, etc., tienes que convertirlo explícitamente a un tipo de dato concreto.

    En principio te diría que pruebes a modificar tu código por el siguiente, para trabajar con tipos de datos DateTime, si tu intención es hacer una comparación entre valores de fecha y hora:

            ' A la fecha de hoy (sin la hora), le añadimos 8 horas, lo que hará
            ' que la fecha sea la del día de hoy a las 8 de la mañana.
            '
            Dim fechaCondicion As DateTime = Date.Now.Date.AddHours(8)
    
            If (dgHorario.Rows.Count > 0) Then
    ' El valor de la segunda columna de la fila actual lo convertimos a DateTime. Dim inventor As DateTime = CDate(dgHorario.CurrentRow.Cells(1).Value)

    ' Efectuamos la comparación con valores DateTime, para conocer
    ' si la primera fecha y hora es menor que la segunda. If (inventor < fechaCondicion) Then For i As Integer = 0 To dgHorario.Rows.Count - 1 dgHorario.CurrentCell = dgHorario.Rows(i).Cells(1) dgHorario.CurrentRow.Cells(1).Value = fechaCondicion Next i End If End If

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    viernes, 8 de junio de 2018 18:30
    Moderador
  • "mario gr" escribió:

    > Ingrese los datos como me lo explicaste modificando de String a DateTime
    > pero me sale lo mismo no se cambian las horas .

    Si los datos son DateTime y has realizado la siguiente comparación:

        If (inventor < fechaCondicion) Then

    lo único que me queda por pensar es que el valor de la variable inventor (el valor de la segunda columna de la fila actual) NO ES MENOR que el valor de la variable fechaCondicion (la fecha del día de hoy a las 8:00:00 horas).

    ¡Vamos a ver! Si en la segunda columna tienes este valor:

        08/06/2018 8:00

    ¿Cómo pretendes que sea MENOR que la fecha del día de hoy a las 8:00:00 horas?

    Fíjate la comparación que estás haciendo:

        If (08/06/2018 8:00:00 < 08/06/2018 8:00:00) Then

    Si te fijas bien, LAS DOS FECHAS SON IGUALES, por tanto, ninguna es menor que la otra. ;-)
       
    > si no tengo activado Option Strict ,..

    ¡Mal hecho!


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta mario gr viernes, 8 de junio de 2018 20:19
    viernes, 8 de junio de 2018 19:03
    Moderador
  • "mario gr" escribió:

    > Enrique una pregunta acabo de ingresar el codigo que me generaste en un evento
    > del datagridview  CellContentClick donde al hacer click en cualquier dato mayor
    > a 8 no hay cambios pero cuando le hago click en algun dato menor a 8 me cambia
    > todos los datos de la columna a 8 ...

    Mario, ignoro por completo lo que te está sucediendo. Yo, lo único que te puedo decir es que, si deseas efectuar comparaciones con valores de fecha y hora (que dos fechas sean iguales, o que una sea menor o mayor que otra), tienes que convertir los valores previamente a DateTime. Todo lo que no sea hacer esto, son ganas de perder el tiempo.

    Dices que te "cambia los datos". Si es así, digo yo que será porque la comparación que hayas establecido es verdadera (True), por tanto se ejecutará el código que le hayas indicado en el bloque If (comparacion) Then.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta mario gr viernes, 8 de junio de 2018 20:19
    viernes, 8 de junio de 2018 19:38
    Moderador

Todas las respuestas

  • "mario gr" escribió:

    > Tengo un problema al querer cambiar los datos de una columna(HORA) de un datagridview(dgHorario),
    > pero lo que Necesito es la Condicion y que si los datos son menores a (8:00:00) que se cambien
    > a las (8:00:00) pero los que son mayores que no se cambien sino este con su misma data, este es
    > el codigo que hice pero no me resulta alguien me puede ayudar porfa .
    >
    >    Dim fechaCondicion As String = Date.Now.ToString("dd/MM/yy 08:00:00")
    >
    >    Dim Inventor As String
    >    If dgHorario.Rows.Count > 0 Then
    >       Inventor = dgHorario.CurrentRow.Cells(1).Value
    >       If Inventor < fechaCondicion Then

    Hola, Mario:

    Me imagino que serás consciente de que estás realizando una comparación de datos ALFANUMÉRICOS, por tanto, no me extraña que tengas problemas porque aunque los datos alfanuméricos parezcan una "fecha" (entre comillas), en realidad es una cadena de números, barras diagonales y dos puntos que el compilador los tratará como si fueran letras.

    Si tu intención es comparar una fecha y hora, tienes que trabajar con tipos de datos DateTime en lugar de hacerlo con tipos de datos String. Si tuvieras activada la instrucción Option Strict (lee la "coletilla" que aparece al final de este mensaje), el compilador de Visual Basic no te permitiría realizar la compilación hasta que no hicieras las conversiones explícitas de datos, porque deberías de saber que el valor de la propiedad Value de un objeto DataGridViewCell (dgHorario.CurrentRow.Cells(1).Value) devuelve un valor Object, que para asignárselo a un valor String, Integer, Long, DateTime, etc., tienes que convertirlo explícitamente a un tipo de dato concreto.

    En principio te diría que pruebes a modificar tu código por el siguiente, para trabajar con tipos de datos DateTime, si tu intención es hacer una comparación entre valores de fecha y hora:

            ' A la fecha de hoy (sin la hora), le añadimos 8 horas, lo que hará
            ' que la fecha sea la del día de hoy a las 8 de la mañana.
            '
            Dim fechaCondicion As DateTime = Date.Now.Date.AddHours(8)
    
            If (dgHorario.Rows.Count > 0) Then
    ' El valor de la segunda columna de la fila actual lo convertimos a DateTime. Dim inventor As DateTime = CDate(dgHorario.CurrentRow.Cells(1).Value)

    ' Efectuamos la comparación con valores DateTime, para conocer
    ' si la primera fecha y hora es menor que la segunda. If (inventor < fechaCondicion) Then For i As Integer = 0 To dgHorario.Rows.Count - 1 dgHorario.CurrentCell = dgHorario.Rows(i).Cells(1) dgHorario.CurrentRow.Cells(1).Value = fechaCondicion Next i End If End If

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    viernes, 8 de junio de 2018 18:30
    Moderador
  • buen dia Enrique, Ingrese los datos como me lo explicaste modificando de String a DateTime... "tienes que trabajar con tipos de datos DateTime en lugar de hacerlo con tipos de datos String."  pero me sale lo mismo no se cambian las horas .

    si no tengo activado Option Strict ,.. 

    viernes, 8 de junio de 2018 18:45
  • "mario gr" escribió:

    > Ingrese los datos como me lo explicaste modificando de String a DateTime
    > pero me sale lo mismo no se cambian las horas .

    Si los datos son DateTime y has realizado la siguiente comparación:

        If (inventor < fechaCondicion) Then

    lo único que me queda por pensar es que el valor de la variable inventor (el valor de la segunda columna de la fila actual) NO ES MENOR que el valor de la variable fechaCondicion (la fecha del día de hoy a las 8:00:00 horas).

    ¡Vamos a ver! Si en la segunda columna tienes este valor:

        08/06/2018 8:00

    ¿Cómo pretendes que sea MENOR que la fecha del día de hoy a las 8:00:00 horas?

    Fíjate la comparación que estás haciendo:

        If (08/06/2018 8:00:00 < 08/06/2018 8:00:00) Then

    Si te fijas bien, LAS DOS FECHAS SON IGUALES, por tanto, ninguna es menor que la otra. ;-)
       
    > si no tengo activado Option Strict ,..

    ¡Mal hecho!


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta mario gr viernes, 8 de junio de 2018 20:19
    viernes, 8 de junio de 2018 19:03
    Moderador
  • Enrique una pregunta acabo de ingresar el codigo que me generaste en un evento del datagridview  CellContentClick donde al hacer click en cualquier dato mayor a 8 no hay cambios pero cuando le hago click en algun dato menor a 8 me cambia todos los datos de la columna a 8 ... 

    viernes, 8 de junio de 2018 19:06
  • Enrique si hay datos mejores a 8 como vez en la primera pregunta que realize envie tres fotos, la primera foto es como sale y hay menores a 8 esta los ID ( 11,12,13,14) esos datos se deberian cambiarze a 8
    viernes, 8 de junio de 2018 19:15
  • "mario gr" escribió:

    > Enrique una pregunta acabo de ingresar el codigo que me generaste en un evento
    > del datagridview  CellContentClick donde al hacer click en cualquier dato mayor
    > a 8 no hay cambios pero cuando le hago click en algun dato menor a 8 me cambia
    > todos los datos de la columna a 8 ...

    Mario, ignoro por completo lo que te está sucediendo. Yo, lo único que te puedo decir es que, si deseas efectuar comparaciones con valores de fecha y hora (que dos fechas sean iguales, o que una sea menor o mayor que otra), tienes que convertir los valores previamente a DateTime. Todo lo que no sea hacer esto, son ganas de perder el tiempo.

    Dices que te "cambia los datos". Si es así, digo yo que será porque la comparación que hayas establecido es verdadera (True), por tanto se ejecutará el código que le hayas indicado en el bloque If (comparacion) Then.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta mario gr viernes, 8 de junio de 2018 20:19
    viernes, 8 de junio de 2018 19:38
    Moderador
  • hola erique,  gracias por el dato de datetime al final el codigo que me sirvio

    Sub CargarDgv()
            Dim fechaCondicion As DateTime = Date.Now.Date.AddHours(8)
            For Each row As DataGridViewRow In Me.dgHorario.Rows
                If row.Cells("HORA").Value < fechaCondicion Then
                    row.Cells("HORA").Value = fechaCondicion
                End If
            Next
     End Sub

    te agradesco por la ayuda.

    viernes, 8 de junio de 2018 20:21