none
Buscar en un DataGridView RRS feed

  • Pregunta

  •  

    Hola señores,

     

    Uso VS2005 + VB.NET en W XP.

     

    Tengo un datagridview en un Form que relleno con una colección de entidades de Usuario.

     

    Como tengo muchos usuarios en la colección, quisiera meter una búsqueda por nombre.

     

    ¿Cómo podría hacerlo ? Los ejemplos que he visto utilizan Dataset y yo tengo una Colección de Objetos.

     

    Muchas gracias.

     

     

    viernes, 24 de octubre de 2008 7:20

Todas las respuestas

  • Te pego la respuesta que le dí días atrás a otro compañero y que al final preguntaba otra cosa...

     

    Para buscar en un datagridview primero debes decidir si la búsqueda se referirá a una columna en concreto o se aplica a cierto número de columnas o a todas. Lo lógico es que como cada columna se asocia a un tipo de datos concreto, la búsqueda sea aplicada sólo a la columna correspondiente, entonces para eso la interfaz debería ser clara al respecto y haciendo uso la selección correcta de la columna (por ejemplo desde un combobox se fuerza a elegir que se quiere buscar, por ejemplo: nombre, apellido,teléfono, dirección, cargo,etc...) esto puede aprovecharse así mismo para filtrar que el textbox sólo vaya a contener el tipo de datos acorde al tipo de datos que contiene la columna, no obstante por sencilez supondremos que todo son strings... y que la columna en la que buscar es la segunda (apellido)

     

    Code Snippet

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim total As Integer = 0

        'Dim col As Integer = ComboBox1.SelectedIndex

       

     

        Dgv1.ClearSelection()

        For k As Integer = 0 To Dgv1.RowCount - 1

            If Dgv1.Item(1, k).Value = TextBox1.Text Then

                Dgv1.Item(1, k).Selected = True

                total += 1

            End If

        Next

        ' de cara a un usuario un datagridview es una tabla...

        MsgBox("Se encontraron " & total & " coincidencias, se seleccionaron sobre la tabla, revísela...")

    End Sub

     

    Hemos supuesto que la columna primera (la cero) contiene el campo nombre y que la columna segunda (la 1) es sobre la que vamos a buscar (campo apellido) , evidentemente, si como te señalo la columna es elegible desde un combobox, deberías cambiar item(1, ...) por item(col, ...) 

     

    Si la cantidad de filas fuera 'enorme' quizás te interesara activar el orden en el datagridview para hacer búsquedas binarias... pero vamos para unos pocos de miles recorrer elemento e elemento es todavía rápido...

     

    En el código de ejemplo la búsqueda ha consistido en seleccionar las celdas que cumplen el requisito y contar el total de búsquedas halladas, pero igualmente podrías seleccionar la fila completa o copiar el contenido de las filas...etc...

     

    nota.: Dgv1 es el nombre que le he dado al DataGridview... para abreviar..

    miércoles, 29 de octubre de 2008 6:51