none
Llenar fila por fila un DataGridView RRS feed

  • Pregunta

  • Hola estoy intentando llenar un DataGridView Fila a fila uso el siguiente código en un botón

      Dim MiDataSet As New DataSet()
            Dim Comando As New SqlDataAdapter("SELECT * FROM producto where codigo = '" & txtcodbarras.Text & "' ", conexion)
            Comando.Fill(MiDataSet, "producto")
            Me.datalistado.DataSource = MiDataSet.Tables("producto")

    cuando doy clic me carga el registro filtrado por el txtcodbarras.text y lo muestra sin ningún problema en el DataGridView pero si elijo otro registro sobreescribe el anterior y no se como hacer para recorrer el datagridview y ponerlo debajo a medida que los valla agregando        Gracias


    jueves, 13 de julio de 2017 14:48

Respuestas

  • Hola:
    En un Form como el de la imagen

    Copia y pega el siguiente código

    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient

    Public Class Form1
        Private moDataTable As New DataTable
        Private msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Me.DataGridView1.AllowUserToAddRows = False
            '
            moDataTable.Columns.Add(New DataColumn("EmployeeId", Type.GetType("System.Int16")))
            moDataTable.Columns.Add(New DataColumn("FirstName", Type.GetType("System.String")))
            Me.DataGridView1.DataSource = moDataTable
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Try
                ' Configuramos una conexión con el origen de datos.
                Using loConexion As New SqlConnection(msCadenaSQL)
                    loConexion.Open()
                    Dim lsQuery As String = "Select EmployeeID, FirstName from employees Where EmployeeID=@ID"
                    Using loComando As New SqlCommand(lsQuery, loConexion)
                        loComando.Parameters.Add(New SqlParameter("@ID", Me.txtId.Text))
                        Using loDataReader As SqlDataReader = loComando.ExecuteReader()
                            Dim Fila As DataRow = moDataTable.NewRow
                            Do While loDataReader.Read()
                                Fila.Item("EmployeeID") = loDataReader.Item("EmployeeID")
                                Fila.Item("FirstName") = loDataReader.Item("FirstName")
                            Loop
                            moDataTable.Rows.Add(Fila)
                        End Using
                    End Using
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta Bruno030 jueves, 13 de julio de 2017 20:56
    jueves, 13 de julio de 2017 20:04

Todas las respuestas

  • Hola:

     Tienes que hacer una colección inicial y por cada búsqueda ir agregando a la colección el elemento recuperado, pareciera que quieres hacer un arrito de ventas, entonces tu solución aproximada podría ser  analiza este articulo:

    Llenar DataGridView con datos de TextBox’s usando Datasource o el método Add()

     En el encontraras como agregar un item a una colección y mostrar la colección en un DataGridView, también podrás encontrar cuando un item ya existe en la lista entre otras utilidades que se que te serán de ayuda.

     Lo único que tendrías que cambiar es la forma en que recuperas la información desde la Bd ya que tendrías que usar una clase para poder trabajar en sincronía con lo que te sugiero.

     Espero te sea de utilidad.


    Saludos desde Monterrey, Nuevo León, México!!!

    jueves, 13 de julio de 2017 15:31
  • Muchas Gracias Jose luis por tu respuesta la verdad soy muy novato en esto de vb.net  si me pudieras dar un ejemplo

    te lo Agradecería Gracias 


    • Editado Bruno030 jueves, 13 de julio de 2017 15:43
    jueves, 13 de julio de 2017 15:43
  • Hola:
    En un Form como el de la imagen

    Copia y pega el siguiente código

    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient

    Public Class Form1
        Private moDataTable As New DataTable
        Private msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Me.DataGridView1.AllowUserToAddRows = False
            '
            moDataTable.Columns.Add(New DataColumn("EmployeeId", Type.GetType("System.Int16")))
            moDataTable.Columns.Add(New DataColumn("FirstName", Type.GetType("System.String")))
            Me.DataGridView1.DataSource = moDataTable
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Try
                ' Configuramos una conexión con el origen de datos.
                Using loConexion As New SqlConnection(msCadenaSQL)
                    loConexion.Open()
                    Dim lsQuery As String = "Select EmployeeID, FirstName from employees Where EmployeeID=@ID"
                    Using loComando As New SqlCommand(lsQuery, loConexion)
                        loComando.Parameters.Add(New SqlParameter("@ID", Me.txtId.Text))
                        Using loDataReader As SqlDataReader = loComando.ExecuteReader()
                            Dim Fila As DataRow = moDataTable.NewRow
                            Do While loDataReader.Read()
                                Fila.Item("EmployeeID") = loDataReader.Item("EmployeeID")
                                Fila.Item("FirstName") = loDataReader.Item("FirstName")
                            Loop
                            moDataTable.Rows.Add(Fila)
                        End Using
                    End Using
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta Bruno030 jueves, 13 de julio de 2017 20:56
    jueves, 13 de julio de 2017 20:04
  • Muchas Gracias J. Carlos H Por el ejemplo me sirvió enormemente Maquina 
    jueves, 13 de julio de 2017 21:01