<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