none
COMO SE PUEDE INCREMENTAR UN STRING. RRS feed

  • Pregunta

  • BUEN DIA EXPERTOS, ESTOY DESARROLANDO EN VISUAL BASIC 2012 .NET

    DE ANTEMANO QUISIERA AGRADECERLE POR LA MOLESTIA DE REPONDERME ,... HACE ALGUNOS DIAS ESTOY TRATANDO DE RESOLVER ESTE TEMA, TENGO EN UNA CAJA DE TEXTO (EN PALABRAS CON NUMEROS) UN CODIGO  QUE DISTINGUI A LOS DEMAS, EN LA CAJA DE TEXTO ME SALE "REV000" CADA VEZ QUE YO QUISIERA ACTUALIZAR ESTE DOCUMENTO SE LE DEBE DE SUMAR +1, YA QUE CUANDO ACTUALIZO ME DEBE DE SALIR "REV001" Y SI SIGUO ACTUALIZANDO "REV002" Y SUCESIVAMENTE,... MI PROBLEMA ES QUE SIEMPRE SE CONCATENA ("REV0001" SE AUMENTA UN NUMERO MAS) O SE PIERDEN LAS LETRAS Y ME SALE SOLO LOS NUMEROS(0,1,2,3 ,....) ... SI ALGUIEN POR AHI TIENE ALGUN EJEMPLE Y ME PUEDE HECHAR LA MANO GRACIAS DE ANTEMANO...

    ----------------------------------

    MARIO GARCIA R.

    jueves, 3 de mayo de 2018 14:03

Respuestas

  • "mario gr" escribió:

    >  TENGO EN UNA CAJA DE TEXTO (EN PALABRAS CON NUMEROS) UN CODIGO  QUE DISTINGUI
    > A LOS DEMAS, EN LA CAJA DE TEXTO ME SALE "REV000" CADA VEZ QUE YO QUISIERA
    > ACTUALIZAR ESTE DOCUMENTO SE LE DEBE DE SUMAR +1, YA QUE CUANDO ACTUALIZO ME
    > DEBE DE SALIR "REV001" Y SI SIGUO ACTUALIZANDO "REV002" Y SUCESIVAMENTE,...
    > MI PROBLEMA ES QUE SIEMPRE SE CONCATENA ("REV0001" SE AUMENTA UN NUMERO MAS) O
    > SE PIERDEN LAS LETRAS Y ME SALE SOLO LOS NUMEROS(0,1,2,3 ,....) ... SI ALGUIEN
    > POR AHI TIENE ALGUN EJEMPLE Y ME PUEDE HECHAR LA MANO GRACIAS DE ANTEMANO...

    Hola, Mario:

    Ante todo, muchos usuarios del foro te agradecerían que no escribas en MAYÚSCULAS todo el contenido de tu mensaje. En el argot de Internet es como si nos estuvieras "gritando", y no creo que sea así. ¡De acuerdo! ;-)

    Como no has indicado el código fuente que estás utilizando (que deberías de haber publicado), no te puedo decir lo que estás haciendo mal. No obstante te diré que para sumar una unidad, o cualquier otra cantidad, al texto "REV000", tienes que separar la cadena "REV" de la cadena "000", convertir ésta última a Interger, y al resultado sumarle una unidad o la cantidad que desees. Finalmente vuelves a concatenar los dos resultados y ese será el valor resultante.

    Inserta en tu formulario la siguiente función:

        Private Shared Function ActualizarRev(texto As String) As String
    
            If ((Not texto Is Nothing) AndAlso (texto.Length > 3)) Then
    
                ' El valor no es Nothing y su longitud es mayor que 3;
                ' proceder a sumar una unidad.
                '
                If (texto.Substring(0, 3).Equals("REV", StringComparison.OrdinalIgnoreCase)) Then
                    ' Las tres primeras letras son REV.
                    '
                    Dim n As Integer
                    If (Integer.TryParse(texto.Substring(3), n)) Then
                        ' Concatenar el texto REV con la suma de una unidad
                        ' rellenando con ceros a la izquierda del número para
                        ' formatearlo a 3 cifras: 001, 002, 003, etc.
                        '
    texto = String.Format("REV{0:00#}", n + 1)
    End If End If End If Return texto End Function

    Observa que se hace una verificación exhaustiva de la cadena pasada al procedimiento, vaya a ser que en lugar de pasarle el texto "REV003", le pases otro texto diferente.

    Cuando desees sumar una unidad al valor actual existente en el control TextBox, simplemente llamarías a la función para actualizar el valor en una unidad:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim texto As String = TextBox1.Text ' --> "REV000"
    
            ' Actualizar 10 veces el contenido actual del control.
            For n = 0 To 9
                texto = ActualizarRev(texto)
                MessageBox.Show(texto)
            Next
    
        End Sub

    En el ejemplo, te aparecerá "REV001", "REV002", ... "REV010".

    ¡Eso es todo! Adapta el ejemplo a tus necesidades.

    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.

    jueves, 3 de mayo de 2018 18:12
    Moderador
  • "mario gr" escribió:

    > Private Sub btnActualizar_Click(sender As Object, e As EventArgs) Handles btnActualizar.Click
    >     Dim Num As Integer
    >     Num += 1
    >     txtGeneradoPdf.Text = txtLetra.Text & Microsoft.VisualBasic.Right(txtNumero.Text & Num, 4)
    > End Sub
    >
    > Con esta consulta me sale el primero "BREV0001" , pero si nuevamente le doy boton ACT me sale
    > de "BREV0001" a "BREV0011" se pasa directamente al 11 deberia irse al 2 salir "BREV0002"....
    > haber si me puedes dar una mano en que estoy fallando gracias de antemano.

    El problema está aquí:

    >   txtNumero.Text & Num

    Lo que estás haciendo es CONCATENAR TEXTO, porque deberías de saber que al utilizar el operador de concatenación &, el resultado será la unión de las cadenas "0001" y "1", es decir, "00011". Aparte, observo que tampoco estás aumentando los números, porque cada vez que se pulse el botón btnActualizar_Click, el valor de la variable Num siempre será 1.

    Olvídate del código que estás utilizando y usa la función ActualizarRev que te indiqué ayer. Ahora bien, ¿cuál es el prefijo correcto? ¿"REV" o "BREV"? ¿Y cuántas cifras vas a utilizar? ¿3 ó 4? Tienes que tenerlo claro porque entonces la función ActualizarRev no va a hacer bien su trabajo.

    Si el prefijo es "BREV" y vas a utilizar 4 cifras, entonces utiliza esta modificación de la función ActualizarBrev:

        Private Shared Function ActualizarBrev(texto As String) As String
    
            If ((Not texto Is Nothing) AndAlso (texto.Length > 4)) Then
    
                ' El valor no es Nothing y su longitud es mayor que 4;
                ' proceder a sumar una unidad.
                '
                If (texto.Substring(0, 4).Equals("BREV", StringComparison.OrdinalIgnoreCase)) Then
                    ' Las cuatro primeras letras son BREV.
                    '
                    Dim n As Integer
                    If (Integer.TryParse(texto.Substring(4), n)) Then
                        ' Concatenar el texto BREV con la suma de una unidad
                        ' rellenando con ceros a la izquierda del número para
                        ' formatearlo a 4 cifras: 0001, 0002, 0003, etc.
                        '
                        texto = String.Format("BREV{0:000#}", n + 1)
                    End If
    
                End If
    
            End If
    
            Return texto
    
        End Function

    Y si es otro el prefijo y número de cifras que vas a utilizar, modifica la función a tus necesidades. ¿OK?

    Y a la función simplemente la llamarías así:

        Private Sub btnActualizar_Click(sender As Object, e As EventArgs) Handles btnActualizar.Click
    
            txtGeneradoPdf.Text = ActualizarBrev(txtGeneradoPdf.Text)
    
        End Sub

    Observa que para nada te hace falta separar las letras de los números, es decir, los valores que parece ser que muestras en los controles txtNumero y txtLetra. Si el valor que deseas actualizar es el que aparece en el control llamado txtGeneradoPdf, el valor de su propiedad Text es el que deberás pasar a la función ActualizarBrev para que se actualice automáticamente.


    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, 4 de mayo de 2018 7:26
    Moderador
  • "mario gr" escribó:

    > :( .... La pregunta es que tengo 2 datagridview(dgMateriales y dgMaterialesIgualdad) 1 boton
    > (btnGuardarMateriales) y por ejemplo: que en la columna de 3 del primer datagridview si es
    > igual a la columna 3 del segundo datagridview me de un "mensaje que no se puede grabar" y si
    > en alguna fila es diferente se pueda grabar al hacerle click en un button. Yo lo hice con un
    > if aplicando la igualdad pero se que esta mal porque lo hice para tres filas .... pero si el
    > usuario solo ingresa 2 filas , una fila, o a lo peor ingresa 5 filas,

    Mario, me vas a disculpar, pero para poder ayudarte, primero me tengo que enterar bien de lo que realmente deseas hacer, y por mucho que he leído tu pregunta (como las anteriores que publicastes y que se derivaron al foro de Windows Forms), no me entero de nada. :-(

    Lo único que medianamente me ha quedado un poco claro es que si el valor de la 3ª columna del primer DataGridView es igual a la 3ª columna del segundo DataGridView, que te aparezca el mensaje de "no se puede grabar". Pero a partir de ahí, se me hace difícil entender el resto del mensaje. ¡Lo siento!

    La verdad es que ignoro para qué quieres conocer si los valores son iguales, si supuestamente tu intención es grabar los datos en una base de datos. ¿Por casualidad es que no deseas que se repitan datos en las tablas de la base de datos? Si la respuesta es afirmativa, la solución la tienes en la base de datos, no en los controles DataGridView, estableciendo las correspondientes restricciones para que no se dupliquen datos en las columnas de las tablas.

    Una vez que intentes grabar los datos, lo único que tienes que hacer es detectar la excepción (error) que con toda seguridad se producirá si no se permiten datos duplicados en una columna. Pero, ¡claro! Primeramente tienes que saber cómo establecer esas restricciones.

    Y otra cuestión. No se si deseas recorrer los dos DataGridView, celda a celda, para saber si coinciden o no sus valores, o solamente una serie de celdas concretas, porque en tu mensaje escribes que "el usuario solo ingresa 2 filas, una fila, o a lo peor ingresa 5 filas". Pues digo yo que también tendrás que conocer las filas exactas que ha ingresado el usuario.

    Si aceptas un consejo, te diré que cuando uno participa en un foro, lo primero que tiene que hacer es explicar claramente lo que desea o pretende hacer, detallando todo aquello que pueda servir de ayuda al resto de usuarios a fin de que te contesten lo más rápidamente posible, porque si estos no se enteran (como es mi caso), ¿cómo pretendes que te puedan ayudar en algo? Lo único que hacen es que leen la pregunta, y como no se enteran de nada, pues no le hacen ningún caso, y se van a leer otra pregunta. Y te lo digo yo que llevo ya unos cuantos años participando en foros y grupos. ;-)


    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, 4 de mayo de 2018 16:48
    Moderador

Todas las respuestas

  • "mario gr" escribió:

    >  TENGO EN UNA CAJA DE TEXTO (EN PALABRAS CON NUMEROS) UN CODIGO  QUE DISTINGUI
    > A LOS DEMAS, EN LA CAJA DE TEXTO ME SALE "REV000" CADA VEZ QUE YO QUISIERA
    > ACTUALIZAR ESTE DOCUMENTO SE LE DEBE DE SUMAR +1, YA QUE CUANDO ACTUALIZO ME
    > DEBE DE SALIR "REV001" Y SI SIGUO ACTUALIZANDO "REV002" Y SUCESIVAMENTE,...
    > MI PROBLEMA ES QUE SIEMPRE SE CONCATENA ("REV0001" SE AUMENTA UN NUMERO MAS) O
    > SE PIERDEN LAS LETRAS Y ME SALE SOLO LOS NUMEROS(0,1,2,3 ,....) ... SI ALGUIEN
    > POR AHI TIENE ALGUN EJEMPLE Y ME PUEDE HECHAR LA MANO GRACIAS DE ANTEMANO...

    Hola, Mario:

    Ante todo, muchos usuarios del foro te agradecerían que no escribas en MAYÚSCULAS todo el contenido de tu mensaje. En el argot de Internet es como si nos estuvieras "gritando", y no creo que sea así. ¡De acuerdo! ;-)

    Como no has indicado el código fuente que estás utilizando (que deberías de haber publicado), no te puedo decir lo que estás haciendo mal. No obstante te diré que para sumar una unidad, o cualquier otra cantidad, al texto "REV000", tienes que separar la cadena "REV" de la cadena "000", convertir ésta última a Interger, y al resultado sumarle una unidad o la cantidad que desees. Finalmente vuelves a concatenar los dos resultados y ese será el valor resultante.

    Inserta en tu formulario la siguiente función:

        Private Shared Function ActualizarRev(texto As String) As String
    
            If ((Not texto Is Nothing) AndAlso (texto.Length > 3)) Then
    
                ' El valor no es Nothing y su longitud es mayor que 3;
                ' proceder a sumar una unidad.
                '
                If (texto.Substring(0, 3).Equals("REV", StringComparison.OrdinalIgnoreCase)) Then
                    ' Las tres primeras letras son REV.
                    '
                    Dim n As Integer
                    If (Integer.TryParse(texto.Substring(3), n)) Then
                        ' Concatenar el texto REV con la suma de una unidad
                        ' rellenando con ceros a la izquierda del número para
                        ' formatearlo a 3 cifras: 001, 002, 003, etc.
                        '
    texto = String.Format("REV{0:00#}", n + 1)
    End If End If End If Return texto End Function

    Observa que se hace una verificación exhaustiva de la cadena pasada al procedimiento, vaya a ser que en lugar de pasarle el texto "REV003", le pases otro texto diferente.

    Cuando desees sumar una unidad al valor actual existente en el control TextBox, simplemente llamarías a la función para actualizar el valor en una unidad:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim texto As String = TextBox1.Text ' --> "REV000"
    
            ' Actualizar 10 veces el contenido actual del control.
            For n = 0 To 9
                texto = ActualizarRev(texto)
                MessageBox.Show(texto)
            Next
    
        End Sub

    En el ejemplo, te aparecerá "REV001", "REV002", ... "REV010".

    ¡Eso es todo! Adapta el ejemplo a tus necesidades.

    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.

    jueves, 3 de mayo de 2018 18:12
    Moderador
  • Buen dia Enrique gracias por responde y Ups te pido disculpa por la letra mayuscula no volvera a pasar :D,..

    a la vez gracias por responde, le envio una foto de mi formulario los que esta resaltado en un cuadro rojo son los principales por ejemplo(foto):

    Enrique como me lo mencionastes yo primero lo separe la letra de los 4 ceros con esta consulta:al hacerle doble clic en la grilla arriba hay 2 cajas de texto donde los separo "BRE" y "0000",... 

     Dim letra, texto As String
            Dim numeros As String = ""
            Dim letras As String = ""
            texto = txtGeneradoPdf.Text.ToUpper
            Dim x As Integer
            For x = 0 To texto.Length - 1
                letra = texto.Substring(x, 1)
                Select Case letra
                    Case "A" To "Z"
                        letras = letras & letra
                    Case "0" To "9"
                        numeros = numeros & letra

                End Select
            Next
            txtNumero.Text = numeros
            txtLetra.Text = letras

    Ahora ya separados lo que intente hacer es que en donde esta la caja de texto "BREV0000" ahi pueda generar al momento de hacerle clic en el boton "ACT" el cuadro cambie a "BREV0001" ..... 

    Private Sub btnActualizar_Click(sender As Object, e As EventArgs) Handles btnActualizar.Click
            Dim Num As Integer
            Num += 1
            txtGeneradoPdf.Text = txtLetra.Text & Microsoft.VisualBasic.Right(txtNumero.Text & Num, 4)
    End Sub 

    Con esta consulta me sale el primero "BREV0001" , pero si nuevamente le doy boton ACT me sale de "BREV0001" a "BREV0011" se pasa directamente al 11 deberia irse al 2 salir "BREV0002"....haber si me puedes dar una mano en que estoy fallando gracias de antemano.

    jueves, 3 de mayo de 2018 19:25
  • "mario gr" escribió:

    > Private Sub btnActualizar_Click(sender As Object, e As EventArgs) Handles btnActualizar.Click
    >     Dim Num As Integer
    >     Num += 1
    >     txtGeneradoPdf.Text = txtLetra.Text & Microsoft.VisualBasic.Right(txtNumero.Text & Num, 4)
    > End Sub
    >
    > Con esta consulta me sale el primero "BREV0001" , pero si nuevamente le doy boton ACT me sale
    > de "BREV0001" a "BREV0011" se pasa directamente al 11 deberia irse al 2 salir "BREV0002"....
    > haber si me puedes dar una mano en que estoy fallando gracias de antemano.

    El problema está aquí:

    >   txtNumero.Text & Num

    Lo que estás haciendo es CONCATENAR TEXTO, porque deberías de saber que al utilizar el operador de concatenación &, el resultado será la unión de las cadenas "0001" y "1", es decir, "00011". Aparte, observo que tampoco estás aumentando los números, porque cada vez que se pulse el botón btnActualizar_Click, el valor de la variable Num siempre será 1.

    Olvídate del código que estás utilizando y usa la función ActualizarRev que te indiqué ayer. Ahora bien, ¿cuál es el prefijo correcto? ¿"REV" o "BREV"? ¿Y cuántas cifras vas a utilizar? ¿3 ó 4? Tienes que tenerlo claro porque entonces la función ActualizarRev no va a hacer bien su trabajo.

    Si el prefijo es "BREV" y vas a utilizar 4 cifras, entonces utiliza esta modificación de la función ActualizarBrev:

        Private Shared Function ActualizarBrev(texto As String) As String
    
            If ((Not texto Is Nothing) AndAlso (texto.Length > 4)) Then
    
                ' El valor no es Nothing y su longitud es mayor que 4;
                ' proceder a sumar una unidad.
                '
                If (texto.Substring(0, 4).Equals("BREV", StringComparison.OrdinalIgnoreCase)) Then
                    ' Las cuatro primeras letras son BREV.
                    '
                    Dim n As Integer
                    If (Integer.TryParse(texto.Substring(4), n)) Then
                        ' Concatenar el texto BREV con la suma de una unidad
                        ' rellenando con ceros a la izquierda del número para
                        ' formatearlo a 4 cifras: 0001, 0002, 0003, etc.
                        '
                        texto = String.Format("BREV{0:000#}", n + 1)
                    End If
    
                End If
    
            End If
    
            Return texto
    
        End Function

    Y si es otro el prefijo y número de cifras que vas a utilizar, modifica la función a tus necesidades. ¿OK?

    Y a la función simplemente la llamarías así:

        Private Sub btnActualizar_Click(sender As Object, e As EventArgs) Handles btnActualizar.Click
    
            txtGeneradoPdf.Text = ActualizarBrev(txtGeneradoPdf.Text)
    
        End Sub

    Observa que para nada te hace falta separar las letras de los números, es decir, los valores que parece ser que muestras en los controles txtNumero y txtLetra. Si el valor que deseas actualizar es el que aparece en el control llamado txtGeneradoPdf, el valor de su propiedad Text es el que deberás pasar a la función ActualizarBrev para que se actualice automáticamente.


    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, 4 de mayo de 2018 7:26
    Moderador
  • Muchas Gracias Enrique M. Montejo, por la paciencia en detallarme mis errores, me salio perfecto muchas gracias :D :D...

    No se si sera mucha molestia Enrique hace algunos días hice una pregunta.... Pero creo que nadie tiene la solución y siempre la pregunta lo envian a otro lado :S

    :( .... La pregunta es que tengo 2 datagridview(dgMateriales y dgMaterialesIgualdad) 1 boton(btnGuardarMateriales) y por ejemplo: que en la columna de 3 del primer datagridview si es igual a la columna 3 del segundo datagridview me de un "mensaje que no se puede grabar" y si en alguna fila es diferente se pueda grabar al hacerle click en un button. Yo lo hice con un if aplicando la igualdad pero se que esta mal porque lo hice para tres filas .... pero si el usuario solo ingresa 2 filas , una fila, o a lo peor ingresa 5 filas, 

    Private Sub btnGuardarMateriales_Click(sender As Object, e As EventArgs) Handles cboGuardarMateriales.Click
            Try
                If dgMateriales.Rows(0).Cells(3).Value.ToString() = dgMaterialesIgualdad.Rows(0).Cells(3).Value.ToString() And
                   dgMateriales.Rows(1).Cells(3).Value.ToString() = dgMaterialesIgualdad.Rows(1).Cells(3).Value.ToString() And
                   dgMateriales.Rows(2).Cells(3).Value.ToString() = dgMaterialesIgualdad.Rows(2).Cells(3).Value.ToString() Then
                    MessageBox.Show("NO SE PUEDE GRABAR MATERIALES DEL PRODUCTO")
                Else
                    MessageBox.Show("PRODUCTO GRABADO")
                End If
            Catch ex As Exception
                MessageBox.Show("error")
            Finally
                conexion.Close()
            End Try
     End Sub

    Tambien le aplique un For Each pero me leia todas las filas de la columna 3 del primer datagridview con la primera fila del segundo datagridview lo malo era que siempre me salia "producto grabado" aunque las 2 columnas 3 son iguales.... 

    Bueno Enrique igual te agradezco bastante por la atencion prestada.

    viernes, 4 de mayo de 2018 15:24
  • "mario gr" escribó:

    > :( .... La pregunta es que tengo 2 datagridview(dgMateriales y dgMaterialesIgualdad) 1 boton
    > (btnGuardarMateriales) y por ejemplo: que en la columna de 3 del primer datagridview si es
    > igual a la columna 3 del segundo datagridview me de un "mensaje que no se puede grabar" y si
    > en alguna fila es diferente se pueda grabar al hacerle click en un button. Yo lo hice con un
    > if aplicando la igualdad pero se que esta mal porque lo hice para tres filas .... pero si el
    > usuario solo ingresa 2 filas , una fila, o a lo peor ingresa 5 filas,

    Mario, me vas a disculpar, pero para poder ayudarte, primero me tengo que enterar bien de lo que realmente deseas hacer, y por mucho que he leído tu pregunta (como las anteriores que publicastes y que se derivaron al foro de Windows Forms), no me entero de nada. :-(

    Lo único que medianamente me ha quedado un poco claro es que si el valor de la 3ª columna del primer DataGridView es igual a la 3ª columna del segundo DataGridView, que te aparezca el mensaje de "no se puede grabar". Pero a partir de ahí, se me hace difícil entender el resto del mensaje. ¡Lo siento!

    La verdad es que ignoro para qué quieres conocer si los valores son iguales, si supuestamente tu intención es grabar los datos en una base de datos. ¿Por casualidad es que no deseas que se repitan datos en las tablas de la base de datos? Si la respuesta es afirmativa, la solución la tienes en la base de datos, no en los controles DataGridView, estableciendo las correspondientes restricciones para que no se dupliquen datos en las columnas de las tablas.

    Una vez que intentes grabar los datos, lo único que tienes que hacer es detectar la excepción (error) que con toda seguridad se producirá si no se permiten datos duplicados en una columna. Pero, ¡claro! Primeramente tienes que saber cómo establecer esas restricciones.

    Y otra cuestión. No se si deseas recorrer los dos DataGridView, celda a celda, para saber si coinciden o no sus valores, o solamente una serie de celdas concretas, porque en tu mensaje escribes que "el usuario solo ingresa 2 filas, una fila, o a lo peor ingresa 5 filas". Pues digo yo que también tendrás que conocer las filas exactas que ha ingresado el usuario.

    Si aceptas un consejo, te diré que cuando uno participa en un foro, lo primero que tiene que hacer es explicar claramente lo que desea o pretende hacer, detallando todo aquello que pueda servir de ayuda al resto de usuarios a fin de que te contesten lo más rápidamente posible, porque si estos no se enteran (como es mi caso), ¿cómo pretendes que te puedan ayudar en algo? Lo único que hacen es que leen la pregunta, y como no se enteran de nada, pues no le hacen ningún caso, y se van a leer otra pregunta. Y te lo digo yo que llevo ya unos cuantos años participando en foros y grupos. ;-)


    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, 4 de mayo de 2018 16:48
    Moderador
  • Buen dia Gracias Enrique se te agradece por tu explicación y enviare una pregunta con el mayor detalle, para que me puedan ayudar con este tema.
    lunes, 7 de mayo de 2018 13:27