none
recorrer un datagridview y guardar un campo autoincremental de una nueva columna RRS feed

  • Pregunta

  • buenas tardes! espero que hayan comenzado muy bien el año!

    mi consulta es la siguiente: en un form tengo un datagridview con varias filas, los datos de las filas estan guardados en la base de datos. (estos datos pertenecen a una sola tabla)

    necesitaria que despues de haber trabajado sobre ese formulario y al presionar el boton "Guardar", me genere por cada fila que está en el datagridview un id autoincremental en una nueva columna, este id pertenece a otra tabla de la base.

    utilizo procedimientos almacenados.

    ejemplo:

    NOMBRE   APELLIDO   DNI                       ID

    ana             lopez       123                       1

    pedro      gutierrez     124                       2

    jose          romero       125                       3

    .............

    .............


    valeria heredia

    domingo, 7 de enero de 2018 20:51

Respuestas

  • Carlos y Fernando buenas tardes!! he logrado resolver el problema planteado, quizas no sea de la mejor manera pero asi funciona!!!

    he dado valores iniciales (en distintos textbox) para insertar un nuevo registro a la tabla que estaba vacia y he creado un procedimiento almacenado que genera un nuevo id_resultado y que se asigna a txtIdResultado.Text

    cada vez que ingreso una nueva fila al datagridview el txtIdResultado.Text aumenta en uno como necesitaba..quizas solamente yo entienda jajaj

    muchas gracias por su tiempo!!


      Private Sub btnGuardar_Click(sender As System.Object, e As System.EventArgs) Handles btnGuardar.Click
            If Me.dgvDataListado.Rows.Count = 0 Then
                MessageBox.Show("Debe haber registros cargados para poder guardarlos.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Information)
                btnAgregarAtletas.Focus()
                Return
            End If

            Dim resultado As New vResultado
            Dim func As New fResultado
            Try
                For Each rows As DataGridViewRow In Me.dgvDataListado.Rows

                    resultado.gid_resultado = txtIdResultado.Text
                    rows.Cells(5).Value = func.Nuevo_Codigo_Resultado
                    resultado.gtiempo = txtTiempo.Text
                    resultado.gposicion = txtPosicion.Text
                    resultado.gid_atleta = rows.Cells(2).Value
                    func.insertar(resultado)
                    'MessageBox.Show("el resultado ha sido guardado correctamente", "Éxitos", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Next
                Nuevo_Codigo_Resultado()
            Catch ex As Exception
                MsgBox("No se pudo guardar la lista de atletas", MsgBoxStyle.Critical)
            End Try
        End Sub



        Dim func As New fResultado
        Sub Nuevo_Codigo_Resultado()
            txtIdResultado.Text = func.Nuevo_Codigo_Resultado
        End Sub


    valeria heredia


    martes, 9 de enero de 2018 21:21

Todas las respuestas

  • Valeria,

    Lo que podes hacer es recorrer cada fila del dgv e ir agregando el valor ID con un ciclo for o un foreach, algo así:

    Dim i As Integer = 0

    For Each row As DataGridViewRow In dgv.Rows row.Cells(3).Value = i + 1 Next

    Aunque lo recomendable es siempre trabajar con la lógica o datos directamente y no con la vista como el objeto DataGridView. Entonces recorrerias un objeto dataTable o List.

    Saludos.


    Fernando Bequir


    lunes, 8 de enero de 2018 11:49
  • buenos dias fernando!! gracias por tu respuesta, la voy a probar!!!

    lo que me esta costando en todos los sistemas que voy haciendo es eso...poder empezar a llenar una tabla de la base que hasta el momento no tiene datos cargados y que tiene como caracteristica un id autonumerico. Vos me decis que no es conveniente  usar el datagridview para que se genere el id y usar los datos directamente, me podrias orientar como hacer eso..

    eL id_cargo tiene relacion con los id_persona de las filas ya cargadas en el datagridview,quiero generar mediante un boton esos nuevos id_cargo ,por ejemplo:

    ID_PERSONA        NOMBRE   APELLIDO       DNI              ID_CARGO

            23                    ana         lopez            123                      1

            17                   pedro    gutierrez         124                      2

            76                    jose        romero          125                     3

    ........

    .......

    no se me ocurre de una manera mas practica y facil...

    gracias por tu atencion!!


    valeria heredia

    • Propuesto como respuesta Pablo Rubio miércoles, 10 de enero de 2018 15:47
    lunes, 8 de enero de 2018 15:53
  • Hola:
    Para este ejemplo, he creado una tabla con los siguientes datos

    Se ejecuta la siguiente consulta con su resultado

    Un saludo desde Bilbo
    Carlos
    lunes, 8 de enero de 2018 20:57
  • Carlos y Fernando buenas tardes!! he logrado resolver el problema planteado, quizas no sea de la mejor manera pero asi funciona!!!

    he dado valores iniciales (en distintos textbox) para insertar un nuevo registro a la tabla que estaba vacia y he creado un procedimiento almacenado que genera un nuevo id_resultado y que se asigna a txtIdResultado.Text

    cada vez que ingreso una nueva fila al datagridview el txtIdResultado.Text aumenta en uno como necesitaba..quizas solamente yo entienda jajaj

    muchas gracias por su tiempo!!


      Private Sub btnGuardar_Click(sender As System.Object, e As System.EventArgs) Handles btnGuardar.Click
            If Me.dgvDataListado.Rows.Count = 0 Then
                MessageBox.Show("Debe haber registros cargados para poder guardarlos.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Information)
                btnAgregarAtletas.Focus()
                Return
            End If

            Dim resultado As New vResultado
            Dim func As New fResultado
            Try
                For Each rows As DataGridViewRow In Me.dgvDataListado.Rows

                    resultado.gid_resultado = txtIdResultado.Text
                    rows.Cells(5).Value = func.Nuevo_Codigo_Resultado
                    resultado.gtiempo = txtTiempo.Text
                    resultado.gposicion = txtPosicion.Text
                    resultado.gid_atleta = rows.Cells(2).Value
                    func.insertar(resultado)
                    'MessageBox.Show("el resultado ha sido guardado correctamente", "Éxitos", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Next
                Nuevo_Codigo_Resultado()
            Catch ex As Exception
                MsgBox("No se pudo guardar la lista de atletas", MsgBoxStyle.Critical)
            End Try
        End Sub



        Dim func As New fResultado
        Sub Nuevo_Codigo_Resultado()
            txtIdResultado.Text = func.Nuevo_Codigo_Resultado
        End Sub


    valeria heredia


    martes, 9 de enero de 2018 21:21