Autocompletando columnas en un DataGridView

<Pregunta>
Estoy desarrollando una TPV, y he visto muchos ejemplos donde existe un texbox para ingresar el codigo o el producto y despues agregarle al datagrid. Mi pregunta es la siguiente:
Existe la forma de escribir directamente en la grilla y que a medida de ingresar las letras me autocomplete el nombre del producto y luego con enter me trae los otros datos (codigo,precio,etc)?
Saludos

<Respuesta>

Public Class Form1

    Private Articulo As New DataTable("Articulos")

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

        '

        ' Simular tabla Articulos

        '

        Articulo.Columns.Add("Codigo")

        Articulo.Columns.Add("Descripcion")

        Articulo.Columns.Add("Precio")

        Articulo.Rows.Add("001", "Resistencia 100oh", "0,15")

        Articulo.Rows.Add("002", "Transistor 2n2234", "1,00")

        Articulo.Rows.Add("003", "Microprocesador Z80", "5,40")

        Articulo.Rows.Add("004", "UART 16C450", "3,45")

        Articulo.Rows.Add("001", "Resistencia 200oh", "0,12")

        Articulo.Rows.Add("002", "Transistor 2n2222", "1,22")

        '

        'Fijar la clave principal para las busquedas

        Dim Claves(0) As DataColumn

        Claves(0) = Articulo.Columns("Descripcion")

        Articulo.PrimaryKey = Claves

        '

        'Crear la lista de cadenas para el autocompletado

        For Each nombre In Articulo.Rows

            CadenasAutocompletado.Add(nombre("Descripcion"))

        Next

        'Dar formato a la vista de nuestro DGV

        Me.DataGridView1.Columns.Add("Codigo", "Codigo")

        Me.DataGridView1.Columns.Add("Descripcion", "Descripcion")

        Me.DataGridView1.Columns.Add("Precio", "Precio")

    End Sub

    '

    'Al editar la celda Descripcion

    Private CadenasAutocompletado As New AutoCompleteStringCollection

    Private Sub ControlEdicion(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing

        If DataGridView1.CurrentCell.ColumnIndex = 1 Then

            DirectCast(e.Control, TextBox).AutoCompleteMode = AutoCompleteMode.SuggestAppend

            DirectCast(e.Control, TextBox).AutoCompleteSource = AutoCompleteSource.CustomSource

            DirectCast(e.Control, TextBox).AutoCompleteCustomSource = CadenasAutocompletado

        End If

    End Sub

    '

    ' Completar las columnas de Codigo/Precio al finalizar la edicion

    Private Sub FinDeEdicion(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit

        'Añadir aqui las validaciones necesarias

        Try

            Dim _Articulo As DataRow = Articulo.Rows.Find(Me.DataGridView1(e.ColumnIndex, e.RowIndex).Value)

            Me.DataGridView1("Codigo", e.RowIndex).Value = _Articulo("Codigo")

            Me.DataGridView1("Precio", e.RowIndex).Value = _Articulo("Precio")

        Catch ex As Exception

            '.... Accion en caso de excepcion

        End Try

    End Sub

End Class

Comments

# re: Autocompletando columnas en un DataGridView

Thursday, April 16, 2009 9:43 AM by Jorge

Gracias por la ayuda

lo implemento de inmediato

saludos

# re: Autocompletando columnas en un DataGridView

Friday, May 29, 2009 12:56 PM by Jorge

Que tal, trate de hacer un cambio en el metodo FinDeEdicion, introduciendo una columna independiente (cantidad) que no se encuentra en mi tabla de origen (articulo), y me da un error  "Referencia a objeto no establecida como instancia de un objeto."

Que estoy haciendo mal?

gracias

# re: Autocompletando columnas en un DataGridView

Monday, June 01, 2009 9:29 AM by peplluis

Hola Jorge,

El problema es que desconozco como realizaste los bindings en tu tabla.

Si te parece puedes contactar conmigo directamente a traves de opcion [Contac] en el principio de pagina margen derecho.

Saludos,

Pep Lluis,

# re: Autocompletando columnas en un DataGridView

Friday, October 09, 2009 11:26 PM by noe garcia

hola tengo una aplicacion similar y parece que es lo que necesito para el proyeto final

la cosa es que en mi caso tengon un datagrid a la cual le he asignado columnas header desde modo diseño con los nombres de : cantidad, codigo, descripcion y precio lo que te pido por favor me ayudes es mostrarme el camino para POOder llenar los campos de descriocion y precio al escribir  el codigo  en la una grilla por favor ayuuuuuuuuuuuuuuudame....

# re: Autocompletando columnas en un DataGridView

Tuesday, October 13, 2009 4:59 AM by peplluis

Hola Noe,

Intentare ayudarte dentro de mis posibilidades. La idea es entender que nesitas... cuando dices poder llenar los campos al escribir el codigo en una grilla, te estas refiriendo a enlazarlo?

En todo caso contacta desde la opcion [Contact] y continuamos la conversacion.

Saludos,

Pep Lluis,

# re: Autocompletando columnas en un DataGridView

Wednesday, February 23, 2011 8:10 AM by will

Buen dia me tira un error en esta linea, donde declaraste la variable nombre, o mejor dicho cual es su funcion en el For, de antemano muchas gracias por la respuesta.

For Each nombre In Articulo.Rows

           CadenasAutocompletado.Add(nombre("Descripcion"))

Next

# re: Autocompletando columnas en un DataGridView

Wednesday, February 23, 2011 1:44 PM by will

tengo una duda, en esta parte, "nombre" que tipo de variable es: de antemano muchas gracias por la respuesta

'Crear la lista de cadenas para el autocompletado

       For Each nombre In Articulo.Rows

           CadenasAutocompletado.Add(nombre("Descripcion"))

       Next

# re: Autocompletando columnas en un DataGridView

Monday, February 28, 2011 11:47 AM by peplluis

Hola will,

Si tienes las opciones de compilacion 'explicid' 'strict' e 'infer' por defecto, si no me equivoco el nombre toma el tipo de 'Object'.

Saludos,

Pep Lluis,

# re: Autocompletando columnas en un DataGridView

Tuesday, June 14, 2011 8:37 AM by CARLOS SUAZNABAR

super ejemplo

gracias por la ayuda

si podes tambien estoy interezado en hacer q en un datagridview cuyas celdas todas sean tipo texto

cuando me situo en una celda se combierta en un combobox similar a lo q hace el sqlserver al crear un atrbuto

# re: Autocompletando columnas en un DataGridView

Friday, August 26, 2011 1:59 PM by oto

Buenos dias, En mi caso estoy utilizando una base de datos con mysql, y me funcionaba todo bien, este mismo metodo, pero ocurria q cada vez q editaba cualquier celda, esto q ya habia dejado las condiciones si estaba en la columna x, pues q ejecutara el autocompledado, bueno no canzar para los q tengan el problema q aun con condicion le autocompleta en todas las columnas, lo unico q tienen q hacer es limpiar CadenasAutocompletado.clear cuando no sea una columna de autocompleado al final y al principio llamar con un metodo la carga de la misma coleccion a la variable CadenasAutocompletado.. saludos..

# re: Autocompletando columnas en un DataGridView

Friday, August 26, 2011 2:08 PM by oto

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

       Cadena_Conexion1 = "Data Source=localhost;" & _

                        "Database=sacdb;Allow Zero Datetime=True;Convert Zero Datetime=True; " & _

                        "User Id=root;Password=clave"

       MySqlConexion1 = New MySql.Data.MySqlClient.MySqlConnection(Cadena_Conexion1)

       'cargar todo los datos relacionados

       Me.InscripcionesDS.Clear()

       Dim MysqlDa As New MySqlDataAdapter

       MysqlDa.SelectCommand = _

        New MySqlCommand("SELECT * FROM contribuyentes", MySqlConexion1)

       ' New MySqlCommand("SELECT * FROM contribuyentes Where id_Pobladores='" & VG.iid_poblador & "'", MySqlConexion1)

       MysqlDa.Fill(InscripcionesDS, "contribuyentes")

       '

       Me.CargarAutocompletado()

   End Sub

   Sub CargarAutocompletado()

       Dim MysqlDa1 As New MySqlDataAdapter

       MysqlDa1.SelectCommand = _

        New MySqlCommand("SELECT * FROM barrios", MySqlConexion1)

       MysqlDa1.Fill(PobladoresDS, "barrios")

       Me.BarrioComboBox.SelectedValue = Me.Id_barrioTextBox.Text

       Conexion.MySqlConexion1.Close()

       'rellena datos para autocompletado

       Dim cmd As New MySqlCommand("Select codigo FROM ingresos", MySqlConexion1)

       Dim dr As MySqlDataReader

       MySqlConexion1.Open()

       dr = cmd.ExecuteReader

       Do While dr.Read

           scAutocomplete.Add(dr.GetString(0))

       Loop

       MySqlConexion1.Close()

   End Sub

   Private Sub DataGridView1_EditingControlShowing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) _

   Handles DataGridView1.EditingControlShowing

       If Me.DataGridView1.CurrentCell.ColumnIndex = 3 AndAlso TypeOf e.Control Is TextBox Then

           Me.CargarAutocompletado()

           With DirectCast(e.Control, TextBox)

               .AutoCompleteMode = AutoCompleteMode.SuggestAppend

               .AutoCompleteSource = AutoCompleteSource.CustomSource

               .AutoCompleteCustomSource = scAutocomplete

               MessageBox.Show("")

           End With

       Else

           scAutocomplete.Clear()

       End If

   End Sub

   Private Sub DataGridView1_DataError(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError

   End Sub

consulten a: eomd.1983@gmail.com

si tengo tiempo porque estoy en un proyecto les contesto....

# re: Autocompletando columnas en un DataGridView

Monday, January 23, 2012 2:41 PM by Ricardo

Excelente ejemplo. Muchas gracias

Leave a Comment

(required) 
(required) 
(optional)
(required) 
If you can't read this number refresh your screen
Enter the numbers above: