none
Como guardar, actualizar y eliminar datos en un Datagridview RRS feed

  • Pregunta

  • Hola, me pueden orientar con la siguiente situacion: 

    Necesito guardar, actualizar y eliminar datos en un Datagridview, en el boton guardar estoy ocupando esta funcion:

     Public Sub ingresarymodificar()
        Dim i = 0
        Dim i2 = 0
        Dim Existe = False
        i = 0
        While i2 < DataGridView1.Rows.Count - 1
          Existe = False
          DT2 = New DataTable
          Dim da As New OleDbDataAdapter("select * from permisos", RUTA)
          da.Fill(DT2)
          If DT2.Rows.Count <> 0 Then
            While i < DT2.Rows.Count
              If DT2.Rows(i).Item(0) = DataGridView1.Rows(i2).Cells(0).Value Then
                Existe = True
              End If
              i = i + 1
            End While
    
            If Existe = False Then
              insertafila(DataGridView1.Rows(i2).Cells(1).Value, DataGridView1.Rows(i2).Cells(2).Value)
            ElseIf Existe = True Then
              modificafila(DataGridView1.Rows(i2).Cells(1).Value, DataGridView1.Rows(i2).Cells(2).Value)
            End If
          Else
            insertafila(DataGridView1.Rows(i2).Cells(1).Value, DataGridView1.Rows(i2).Cells(2).Value)
          End If
          i2 = i2 + 1
        End While
    
      End Sub

    pero no me guarda nada, agradeceria sus comentarios.

    Saluda.

    MauricioHz

    • Cambiado Enrique M. Montejo sábado, 2 de julio de 2011 7:06 acceso a datos (De:Lenguaje VB.NET)
    miércoles, 15 de junio de 2011 1:44

Respuestas

  • en el caso de guardar los datos de la grilla ocupe:

    private void btnAgregar_Click(object sender, EventArgs e)
          //asignar lotes de plantas a una orden creada.
          {
            foreach (DataGridViewRow row in dgwListaPlantas.Rows)
              {
              objeto.Orden =Convert.ToInt32(txtOrden.Text) ;//orden
              objeto.Lote= Convert.ToString(row.Cells["id_lote"].Value);//lote
              objeto.Fecha = Convert.ToDateTime(row.Cells["fecha_siembra"].Value);//fecha_siembra
              objeto.Invernadero = Convert.ToString(row.Cells["id_invernadero"].Value);//invernadero
              objeto.Especie = Convert.ToString(row.Cells["especie_v"].Value) +" "+ Convert.ToString(row.Cells["descripcion"].Value);//especie y variedad
              objeto.Cantidad = Convert.ToInt32(row.Cells["cant_bandej"].Value);//cantidad
             <strong> objeto.ingresarNuevoStock(objeto);</strong>
               }
            dgwListaPlantas.DataSource = null;//para limpiar la grilla despues del ingreso.
          }
    

    asi pude editar la grilla cuando esta ejecutando el programa, y guardar los datos no importando la cantidad de filas editadas por que las recorro con un foreach.

     

    Saludos.

    • Marcado como respuesta mauriciohz lunes, 1 de agosto de 2011 23:35
    lunes, 1 de agosto de 2011 23:35

Todas las respuestas

  • hola

    bueno habria que analziar que hacen esos metodo insertafila() modificafila()

    pero por lo que veo esta abstante enredado el codigo

    primeramente porque usas un While para recorrer las filas del grid, porque no usas un For Each

     

    For Each row As DataGridViewRow In DataGridView1.Rows

    Next

    solo con eso te ahorras un monton de variables he indices, no siquiera debes contar si el Count es mayor a cero porque sino hay rows el for each no ingresara


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 15 de junio de 2011 2:42
  • Hola Leandro, Gracias por contestar, mira cambie el codigo y lo deje de esta manera:

     

    Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click

            ingresarGrilla()

    End Sub

    'funcion para recorrer grilla y guardar cada dato.

       Private Sub ingresarGrilla()

            For Each row As DataGridViewRow In DataGridView1.Rows

                Dim i = 0

                Dim i2 = 0

                insertafila(DataGridView1.Rows(i2).Cells(1).Value, DataGridView1.Rows(i2).Cells(2).Value)

       Next

    'funcion para ingresar datos

     Public Sub insertafila(ByVal a As String, ByVal b As String)

            Dim intru = New OleDbCommand("insert permisos values('" + a + "','" + b + "')", RUTA)

            Try

                RUTA.Open()

                intru.ExecuteNonQuery()

            Catch ex As Exception

            Finally

                RUTA.Close()

            End Try

        End Sub

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

    pero no guarda los datos, captura el valor de las variables llegan hasta la funcion de insertar con las variables a y b y no ingresan a la base ni siquiera muestra algun error, agradeceria por ayuda.

    Gracias.

    MauricioHz.

     

    miércoles, 15 de junio de 2011 4:25
  • hola

    tendrias dos puntos para comentar

    - primero usa parametros, o sea en esta linea

    Dim intru = New OleDbCommand("insert permisos values('" + a + "','" + b + "')", RUTA)

    no concaten el string

    usa

    Dim query As String = "insert permisos values(@param1, @param2)"

    Dim intru As New OleDbCommand(query , RUTA)

    intru.Parameters.AddWithValue("@param1", a)

    intru.Parameters.AddWithValue("@param2", b)

    intro.ExecuteNonQuery()

     

    - segundo, la base de datos que usas es Access, no ?

    si es asie sta esta integrada al VS ? o sea la puedes ver en el solution explorer

    si es asi recuerda que el propio VS realzia una copia de la misma a la carpeta \bin\Debug del proyecto

    quizas en esta db que se copia en la cual esta aplciando los cambios y no en la que tienes en en el proyecto

     

    saludos

     


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Propuesto como respuesta Eder Costa lunes, 20 de junio de 2011 17:32
    miércoles, 15 de junio de 2011 12:19
  • Hola leandro,

    probé el codigo anterior y pasa lo mismo todo funciona pero no se guardan los datos,

    disculpa pero tendrás algun ejemplo que sea similar para estudiar y aplicar en lo que necesito hacer.

    bueno de todas maneras envio el codigo si me puedes ayudar a ver donde esta el problema.

    • código en la clase: 

    Imports System.Data

    Imports System.Data.OleDb

    Public Class Class1

        Dim dt As New DataTable

        Dim DT2 As New DataTable

        Dim conexion As New OleDbConnection(" Provider=Microsoft.Jet.OLEDB.4.0;Data Source=I:\proyecto\bdejemplo.mdb")

        Dim SQLDA As New OleDbDataAdapter

     

        Public Function listarPermisos()

            dt = New DataTable

            Dim da As New OleDbDataAdapter("select * from permisos", conexion)

            da.Fill(dt)

            Return dt

        End Function

     

        Public Sub insertafila(ByVal a As String, ByVal b As String)

            Try

                conexion.Open()

                Dim query As String = "insert permisos values(@param1, @param2)"

                Dim intru As New OleDbCommand(query, conexion)

                intru.Parameters.AddWithValue("@param1", a)

                intru.Parameters.AddWithValue("@param2", b)

                intru.ExecuteNonQuery()

            Catch ex As Exception

            Finally

                conexion.Close()

            End Try

        End Sub

    End Class

     

    • código formulario

    Public Class Form3

        Dim objlista As New Class1

        Dim nuevoObj As New Class1

        Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

            cargarGrilla()

        End Sub

        'boton guardar.

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            ingresarGrilla()

            cargarGrilla()

        End Sub

     

        Private Sub ingresarGrilla()

            For Each row As DataGridViewRow In DataGridView1.Rows

                Dim i = 0

                Dim i2 = 0

                nuevoObj.insertafila(DataGridView1.Rows(i2).Cells(1).Value, DataGridView1.Rows(i2).Cells(2).Value)

            Next

        End Sub

     

        Public Sub cargarGrilla()

            Dim obj As New Class1

            Dim nuevoTable As New DataTable

            nuevoTable = obj.listarPermisos()

            Me.DataGridView1.DataSource = nuevoTable

        End Sub

    End Class

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

    Gracias.

    Saludos

    MauricioHz

    jueves, 16 de junio de 2011 3:54
  • probé el codigo anterior y pasa lo mismo todo funciona pero no se guardan los datos,

    algo que note es que has suado el try...catch pero en la captura del error no haces nada, no informas, no logueas, no haces nada

    entocnes si se produce un fallo como te enteras ? creo que ahi esta le problema si hay un error cuando insertas pero nadie te avisa porque el catch toma el error y no hace nada con el

     

    podrias usar


    Public Sub insertafila(ByVal a As String, ByVal b As String)

        Try

            conexion.Open()

            Dim query As String = "insert permisos values(@param1, @param2)"

            Dim intru As New OleDbCommand(query, conexion)

            intru.Parameters.AddWithValue("@param1", a)

            intru.Parameters.AddWithValue("@param2", b)

            intru.ExecuteNonQuery()

        Catch ex As Exception
            Throw
        Finally
            conexion.Close()
        End Try

    End Sub

     

     Private Sub ingresarGrilla()

        Try
            For Each row As DataGridViewRow In DataGridView1.Rows

                Dim i = 0

                Dim i2 = 0

                nuevoObj.insertafila(DataGridView1.Rows(i2).Cells(1).Value, DataGridView1.Rows(i2).Cells(2).Value)

            Next
        Catch ex As Exception
       
            MessageBox.Show(ex.Message)
           
        End Try

    End Sub

     

    de esta forma podras ver el error que se produce

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Propuesto como respuesta Eder Costa lunes, 20 de junio de 2011 17:34
    jueves, 16 de junio de 2011 4:52
  • en el caso de guardar los datos de la grilla ocupe:

    private void btnAgregar_Click(object sender, EventArgs e)
          //asignar lotes de plantas a una orden creada.
          {
            foreach (DataGridViewRow row in dgwListaPlantas.Rows)
              {
              objeto.Orden =Convert.ToInt32(txtOrden.Text) ;//orden
              objeto.Lote= Convert.ToString(row.Cells["id_lote"].Value);//lote
              objeto.Fecha = Convert.ToDateTime(row.Cells["fecha_siembra"].Value);//fecha_siembra
              objeto.Invernadero = Convert.ToString(row.Cells["id_invernadero"].Value);//invernadero
              objeto.Especie = Convert.ToString(row.Cells["especie_v"].Value) +" "+ Convert.ToString(row.Cells["descripcion"].Value);//especie y variedad
              objeto.Cantidad = Convert.ToInt32(row.Cells["cant_bandej"].Value);//cantidad
             <strong> objeto.ingresarNuevoStock(objeto);</strong>
               }
            dgwListaPlantas.DataSource = null;//para limpiar la grilla despues del ingreso.
          }
    

    asi pude editar la grilla cuando esta ejecutando el programa, y guardar los datos no importando la cantidad de filas editadas por que las recorro con un foreach.

     

    Saludos.

    • Marcado como respuesta mauriciohz lunes, 1 de agosto de 2011 23:35
    lunes, 1 de agosto de 2011 23:35