none
BUSCAR EN UN DATAGRIDVIEW

    Pregunta

  • PORFAVOR NECESITO QUE ME AYUDEN TENGO UN TEXTBOX Y ABAJO UN DATAGRIDVIEW AL MOMENTO EN QUE YO ESCRIBA EN EL TEXBOX POR EJEMPLO UNA S Y ME APARESCAN TODOS LOS REGISTROS QUE EMPIENZAN CON S EN EL DATAGRIDVIEW
    lunes, 3 de abril de 2017 4:06

Respuestas

  • Hola Joel buenos dias, he probado tu codigo, filtra bien, es como lo solicita anthony pero tengo una pregunta, si borro lo escrito se queda el filtro solo cambia si escribo otra palabra, como logro que al borrar el datagridv se quede vacio.

    Quizas anthony no has leido a probar el codigo pero te lo copio:

    Public Sub filtrarDatos(ByVal buscar As String)
        Try
            Using con As New SqlConnection("MiCadenaConexion")
                Dim query = "Select codigo, nombre from productos where nombre LIKE @filtro"
    
                Dim adapter As New SqlDataAdapter(query, con)
                adapter.SelectCommand.Parameters.AddWithValue("@filtro", String.Format("%{0}%", buscar))
    
                Dim table As New DataTable
                adapter.Fill(table)
    
                DataGridView1.DataSource = table
            End Using
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub txtBuscador_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        Dim filtro As String = CType(sender, TextBox).Text
        If filtro.Trim() <> String.Empty Then  'Si no es vacío filtra
              filtrarDatos(filtro)
        End If
    End Sub

    Has esto  solo cambia los valores con respecto a lo que correponde a tu programa.

    • Editado Javier Roque martes, 4 de abril de 2017 13:17
    • Marcado como respuesta anthony lenyn miércoles, 5 de abril de 2017 3:03
    martes, 4 de abril de 2017 13:05

Todas las respuestas

  • Hola anthony lenyn,

    Puedes guiarte de un ejemplo que realicé en un hilo :

    Filtrar Datagridview con Textbox en Visual Basic .Net

    En el ejemplo se filtra por lo valores que contienen, si quieres obtener por los que comienzan tendrías que usar  :

    ...AddWithValue("@filtro", String.Format("{0}%", buscar))

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Propuesto como respuesta Javier Roque martes, 4 de abril de 2017 13:10
    • Votado como útil Joyce_ACModerator miércoles, 5 de abril de 2017 15:14
    lunes, 3 de abril de 2017 4:36
  • Hola anthony lenyn

    Guíate de este ejemplo, en el encontrarás que en el evento textchanged controlas la letra que vas ingresando y realiza la busqueda, la lista esta llenada en duro por el ejemplo, pero la podrías traer desde la base de datos

    Imports System.Linq
    Public Class Form1
    
        Dim enty1 As entidad = New entidad()
        Dim enty2 As entidad = New entidad()
        Dim enty3 As entidad = New entidad()
        Dim enty4 As entidad = New entidad()
        Dim enty5 As entidad = New entidad()
        Dim lista As List(Of entidad) = New List(Of entidad)
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            enty1._nombre = "brayan"
            enty1._edad = 10
            enty2._nombre = "anthony"
            enty2._edad = 10
            enty3._nombre = "andrea"
            enty3._edad = 10
            enty4._nombre = "raul"
            enty4._edad = 10
            enty5._nombre = "cecilia"
            enty5._edad = 10
            lista.Add(enty1)
            lista.Add(enty2)
            lista.Add(enty3)
            lista.Add(enty4)
            lista.Add(enty5)
            DataGridView1.DataSource = lista
        End Sub
    
    
        Public Class entidad
            Private nombre As String
            Public Property _nombre() As String
                Get
                    Return nombre
                End Get
                Set(ByVal value As String)
                    nombre = value
                End Set
            End Property
            Private edad As Integer
            Public Property _edad() As Integer
                Get
                    Return edad
                End Get
                Set(ByVal value As Integer)
                    edad = value
                End Set
            End Property
        End Class
    
        Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
            If TextBox1.Text = String.Empty Then
                DataGridView1.DataSource = lista
            Else
                DataGridView1.DataSource = lista.FindAll(Function(x) x._nombre.StartsWith(TextBox1.Text))
            End If
        End Sub
    End Class

    Saludos.


    Si logré resolver tu consulta, no olvides votar como útil y/o marcar como respuesta.

    lunes, 3 de abril de 2017 4:40
  • "anthony lenyn" preguntó:

    > ... TENGO UN TEXTBOX Y ABAJO UN DATAGRIDVIEW AL MOMENTO EN QUE YO ESCRIBA
    > EN EL TEXBOX POR EJEMPLO UNA S Y ME APARESCAN TODOS LOS REGISTROS QUE
    > EMPIENZAN CON S EN EL DATAGRIDVIEW

    Hola, Anthony:

    Con independencia que el control DataGridView se encuentre o no enlazado a un origen de datos, lo mismo hasta te resulta de utilidad el contenido del siguiente artículo:

    Cómo buscar registros en un control DataGridView

    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.

    lunes, 3 de abril de 2017 6:11
    Moderador
  • pero no me salen los datos en el datagridview

    brayan de la cruz

    martes, 4 de abril de 2017 3:25
  • Hola Debería funcionar con el código , lo probé te adjunte pantalla. Muéstrame tu código para apoyarte. Saludos

    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    martes, 4 de abril de 2017 6:01
  • Hola Joel buenos dias, he probado tu codigo, filtra bien, es como lo solicita anthony pero tengo una pregunta, si borro lo escrito se queda el filtro solo cambia si escribo otra palabra, como logro que al borrar el datagridv se quede vacio.

    Quizas anthony no has leido a probar el codigo pero te lo copio:

    Public Sub filtrarDatos(ByVal buscar As String)
        Try
            Using con As New SqlConnection("MiCadenaConexion")
                Dim query = "Select codigo, nombre from productos where nombre LIKE @filtro"
    
                Dim adapter As New SqlDataAdapter(query, con)
                adapter.SelectCommand.Parameters.AddWithValue("@filtro", String.Format("%{0}%", buscar))
    
                Dim table As New DataTable
                adapter.Fill(table)
    
                DataGridView1.DataSource = table
            End Using
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub txtBuscador_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        Dim filtro As String = CType(sender, TextBox).Text
        If filtro.Trim() <> String.Empty Then  'Si no es vacío filtra
              filtrarDatos(filtro)
        End If
    End Sub

    Has esto  solo cambia los valores con respecto a lo que correponde a tu programa.

    • Editado Javier Roque martes, 4 de abril de 2017 13:17
    • Marcado como respuesta anthony lenyn miércoles, 5 de abril de 2017 3:03
    martes, 4 de abril de 2017 13:05
  • amigo esto es de diseño

    BRAYAN DE LA CRUZ

    y esto es la programacion

    Public Class PRODUCTO

    Private Sub PRODUCTO_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            'TODO: esta línea de código carga datos en la tabla 'Base_facturaDataSet.T_PRODUCTO' Puede moverla o quitarla según sea necesario.
            Me.T_PRODUCTOTableAdapter.Fill(Me.Base_facturaDataSet.T_PRODUCTO)

        End Sub



        Private Sub GroupBox1_Enter(sender As System.Object, e As System.EventArgs) Handles GroupBox1.Enter

        End Sub

        Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
            Me.T_PRODUCTOTableAdapter.GUARDAR(CODIGO_PRODUCTOTextBox.Text, NOMBRE_VENDEDORTextBox.Text, NOMBRE_PRODUCTOTextBox.Text, PRECIO_PRODUCTOTextBox.Text, CATEGORIA_PRODUCTOTextBox.Text, CANTIDAD_PRODUCTOTextBox.Text)
            Me.T_PRODUCTOTableAdapter.Fill(Me.Base_facturaDataSet.T_PRODUCTO)
        End Sub

        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            CODIGO_PRODUCTOTextBox.Clear()
            NOMBRE_VENDEDORTextBox.Text = String.Empty
            NOMBRE_PRODUCTOTextBox.Text = String.Empty
            PRECIO_PRODUCTOTextBox.Text = String.Empty
            CATEGORIA_PRODUCTOTextBox.Focus()
            CANTIDAD_PRODUCTOTextBox.Focus()
            T_PRODUCTOBindingSource.AddNew()
        End Sub

        Private Sub Button7_Click(sender As System.Object, e As System.EventArgs) Handles Button7.Click
            PORTADA.Show()
            Me.Hide()
        End Sub

        Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
            Me.T_PRODUCTOTableAdapter.MODIFICAR(CODIGO_PRODUCTOTextBox.Text, NOMBRE_VENDEDORTextBox.Text, NOMBRE_PRODUCTOTextBox.Text, PRECIO_PRODUCTOTextBox.Text, CATEGORIA_PRODUCTOTextBox.Text, CANTIDAD_PRODUCTOTextBox.Text, CODIGO_PRODUCTOTextBox.Text)
            Me.T_PRODUCTOTableAdapter.Fill(Me.Base_facturaDataSet.T_PRODUCTO)
        End Sub

        Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
            Me.T_PRODUCTOTableAdapter.ELIMINAR(CODIGO_PRODUCTOTextBox.Text)
            Me.T_PRODUCTOTableAdapter.Fill(Me.Base_facturaDataSet.T_PRODUCTO)
        End Sub

        Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
            Me.T_PRODUCTOTableAdapter.Fill(Me.Base_facturaDataSet.T_PRODUCTO)
        End Sub

        Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
            Dim filtro As String = CType(sender, TextBox).Text
            If filtro.Trim() <> String.Empty Then  'Si no es vacío filtra
                filtrarDatos(filtro)
            End If
        End Sub

    End Class

    y quiero que cuando escriba una letra me en el textbox1 que es de descripcion me comiense aparecer todos los registros que empiezan con esa letra que escribi en el datagridview que estan guardados en la base de datos

    PORFAVOR NECESITO AYUDA

    LA CADENA ES ("provider= microsoft.jet.oledb.4.0;data source = ..\base_factura.mdb")

    la base de datos es base_factura

    la tabla es T_PRODUCTO


    martes, 4 de abril de 2017 21:40
  • javier rocco

    no me sale ya le cambie la cadena aqui que toca cambiar 

    Dim query = "Select codigo, nombre from productos where nombre LIKE @filtro"


    martes, 4 de abril de 2017 23:29
  • Mira en esa cadena cambias a los valores de tu tabla por ejemplo segun la datagridview que muestras entonces Codigo en tu caso se llama CODIGO_PRODUCTO y el nombre para tu caso es NOMBRE_PRODUCTO 

    Dim query = "Select CODIGO_PRODUCTO, NOMBRE_PRODUCTO from T_PRODUCTO where NOMBRE_PRODUCTO LIKE @filtro"

    martes, 4 de abril de 2017 23:33
  • y aqui porque estoy trabajando con access

    SqlConnection

    SqlDataAdapter


    QUE PONGO
    martes, 4 de abril de 2017 23:40
  • en access he visto que usan OleDbConnection

    y usar 

    Imports System.Data.OleDb

    algo asi:

    Dim conn As New System.Data.OleDb.OleDbConnection()

    Yo no uso mucho access pero estoy guiandome de una pagina como hacer la conexion con access este es un ejemplo:

    Public Sub ConnectToAccess()
            Dim conn As System.Data.OleDb.OleDbConnection = New System.Data.OleDb.OleDbConnection
            ' TODO: Modify the connection string and include any
            ' additional required properties for your database.
            conn.ConnectionString = ("Provider=Microsoft.Jet.OLEDB.4.0;" + ("Data source= C:\Documents and Settings\username\" + "My Documents\AccessFile.mdb"))
            Try 
                conn.Open
                ' Insert code to process data.
            Catch ex As Exception
                MessageBox.Show("Failed to connect to data source")
            Finally
                conn.Close
            End Try
            
        End Sub

    Saludos,


    martes, 4 de abril de 2017 23:47
  • Este es otro ejemplo:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Objeto conexión para conectarse a la base de datos de Access
            Dim strConexion As New OleDbConnection("Provider=Microsoft.jet.Oledb.4.0;Data Source=" + My.Application.Info.DirectoryPath + "\base_factura.mdb")
            'Variable que contiene la select a ejecutar sobre la base de datos
            Dim strSQL As String = "Select * from T_PRODUCTO"
            'Adaptador de la base de datos con la aplicación
            Dim adaptador As New OleDb.OleDbDataAdapter(strSQL, strConexion)
            Dim ds As New DataSet
    
            'Rellena al adaptador con el primer dato leído
            adaptador.Fill(dt)
            'Vacía la memoria del adaptador
            adaptador.Dispose()
                   
          
        End Sub


    martes, 4 de abril de 2017 23:56
  • me sale que

           Error 1 'con' no está declarado. Puede que esté inaccesible debido a su nivel de protección.

    javier rocco
    martes, 4 de abril de 2017 23:58
  • ese con es el nombre de la conexion como has llamado a tu conexion? o recien lo estas haciendo?

    Imagino ya has guardado datos haces registros alli utilizas una conexion como se llama tu conexion? 

    Puedes guiarte del otro ejemplo. Adaptadlo a tu codigo no copies y pegues hay cambios que debes hacer en base a lo que ya tienes. 



    miércoles, 5 de abril de 2017 0:02
  • y como podria ser mi cadena de conexion si esta en el escritorio,abrir aqui,proyecto enlazado a la base de datos,proyecto,proyecto,bin,debug
    miércoles, 5 de abril de 2017 0:16
  • Lo tienes en el escritorio? Dale click derecho a tu base de datos propiedades alli sale la ruta. Esa la pondras en esa parte donde dice la ruta y lo adaptas al primer ejemplo y con respecto al otro ejemplo entonces tendrias que tenerlo dentro de la carpeta debug
    miércoles, 5 de abril de 2017 0:43
  • pero quiero para poner asi(provider= microsoft.jet.oledb.4.0;data source = ..\base_factura.mdb") solo que la base de datos esta dentro de la carpeta bin y debug
    miércoles, 5 de abril de 2017 1:09
  • esta linea no lo resuelve?

    Dim strConexion As New OleDbConnection("Provider=Microsoft.jet.Oledb.4.0;Data Source=" + My.Application.Info.DirectoryPath + "\base_factura.mdb")
    Tu conexion esta en un modulo? porque si usaras using /end using te seria mas facil y no tendrias que estar generarte problemas.

    miércoles, 5 de abril de 2017 1:21
  • amigo tu programacion si me sirvio lo que te falta es que al darle clic el el registro me aparescan los datos en los textbox que tengo mas arriba que me sirven para ingresar datos

    ayudame con esa parte

    javier rocco

    miércoles, 5 de abril de 2017 2:29
  • Si te sirvio esta seccion en tu consulta marca la respuesta.

    Respecto a lo otro me supongo te refieres a la otra consulta que haces del boton?

    Ha verdad ya se a que te refieres de la misma forma como te mostre el codigo en el otro enneste caso usarias el evento cellmouseclick sobre el datagridview espera ya t lo hago encendere mi equipo

    Saludos


    miércoles, 5 de abril de 2017 2:34
  • REspecto a los que mencionas No se que nombre le has colocado a tu DataGridView1 pero yo para tu ejemplo lo colocado dgvProducto entonces seria asi:

    Private Sub dgvProducto_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvProducto.CellMouseClick
     If e.RowIndex < 0 Then Exit Sub
     Dim row As DataGridViewRow = CType(sender, DataGridView).CurrentRow
     txtCod_Producto.Text = dgvProducto.Item(0, e.RowIndex).Value
     txtNombreVend.Text = dgvProducto.Item(1, e.RowIndex).Value
     txtNombreProd.Text = dgvProducto.Item(2, e.RowIndex).Value
     txtPrecioProd.Text = dgvProducto.Item(3, e.RowIndex).Value
     txtCategoria.Text = dgvProducto.Item(4, e.RowIndex).Value
     txtCantidad.Text = dgvProducto.Item(5, e.RowIndex).Value
      End Sub

    los textbox los cambias por el valor de tu formulario respectivamente

    Saludos

    Si obtuviste solución a tu duda no olvides marcar la respuesta


    miércoles, 5 de abril de 2017 2:51