Buscar un texto en una columna y seleccionar los coincidentes en un DGV

<Pregunta>
Que tal .. igual no sé si este comentario sea para es hilo, pero tengo un problema .. tengo un datagridview pero quiero agregar un textbox fuera del datagrid, para cuando empiece a escribir vaya buscando en el datagrid y que se vaya seleccionando, sé que para ese procedimiento se juega un poco con el datatable pero aún estoy perdido … alguién tiene una sugerencia ..

Mil gracias

<Respuesta>
… Se me ocurre algo similar a esto.

    Private Articulo As New DataTable(“Articulos”)

    Private MIDGV As New DataGridView

    Private MITXT As New TextBox

 

    Private Sub Form1_Load() Handles MyBase.Load

       

        ‘ Simular tabla Articulos

       

        Articulo.Columns.Add(“Codigo”)

        Articulo.Columns.Add(“Descripcion”)

        Articulo.Columns.Add(“Precio”)

        Articulo.Rows.Add(“001”, “Resistencia 100ohms”, “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(“005”, “Resistencia 200ohms”, “0,12”)

        Articulo.Rows.Add(“006”, “Transistor 2n2222″, “1,22”)

       

        ‘ marco

        Dim marcoDGV = New FlowLayoutPanel

        marcoDGV.BorderStyle = BorderStyle.Fixed3D

        marcoDGV.Width = Me.Width

        marcoDGV.Height = Me.Height

        ‘ Añadir el marco con el DataGridView y textBox

        marcoDGV.Controls.AddRange(New Control() {MIDGV, MITXT})

        Me.Controls.Add(marcoDGV)

        ‘ Seleccionar el textbox

        MITXT.Select()

        ‘ al cambiar el texto

        AddHandler MITXT.TextChanged, AddressOf VerSeleccion

    End Sub

 

    ‘ LINQ (Con VB9 ‘Visual Studio 2008′)

    ‘ Mostrar la seleccion de los registros

    ‘ que contienen la seleccion del texto

    ‘ introducido en el textBox

    Private Sub VerSeleccion()

        MIDGV.DataSource = (From S In Articulo Where S.Item(“Descripcion”).ToString.Contains(MITXT.Text) _

                                 Select Codigo = S.Item(“Codigo”), _

                                        Descripcion = S.Item(“Descripcion”) _

                            ).ToList

    End Sub

Saludos,
Pep Lluis,

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

Guardar el resultado de una vista en una tabla

Respondiendo a una consulta de cómo copiar los registros seleccionados de una tabla origen a una nueva tabla, os dejo esta propuesta que espero sea de vuestra utilidad.


‘ Simular tabla Origen

Dim Origen As New DataTable(“Maestro”)
Origen.Columns.Add(“Cliente”)
Origen.Columns.Add(“Nombre”)
Origen.Rows.Add(“001”, “Jose Javier Garcia”)
Origen.Rows.Add(“002”, “Jhon Smith Carter”)
Origen.Rows.Add(“003”, “Pierre Bertran Janvier”)
Origen.Rows.Add(“004”, “Jose Di Souza”)

‘ Crear una Vista con todos los clientes cuyo nº sea inferior a 3
Dim Seleccion As New DataView(Origen, “Cliente < ‘003’”, “Cliente”, DataViewRowState.CurrentRows)
‘ Crear tabla Destino
Dim Destino As New DataTable(“Duplicado”)
‘ Llenar el destino con los resultados de la vista de datos
Destino = Seleccion.ToTable
‘ Visualizar… (…añadir a vuestro DataSet,..Actualizar…etc.)
Me.DataGridView1.DataSource = Destino
 

Saludos,
Pep Lluis,