Cómo implementar un DataGrid con funciones de búsqueda utilizando ADO.NET y Windows Forms

Seleccione idioma Seleccione idioma
Id. de artículo: 308070 - Ver los productos a los que se aplica este artículo
Para obtener una versión de este artículo para Microsoft Visual Basic 6.0, vea 266654.
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se muestra cómo buscar datos en un control DataGrid de Windows Forms y cómo sincronizar la cuadrícula con los resultados de la búsqueda. En este ejemplo, recupera mediante programación los datos de una clase DataView y después enlaza DataView a DataGrid. El ejemplo permite a los usuarios escribir criterios en un cuadro de texto y hacer clic en Buscar para buscar el registro y mover el puntero a la fila correcta del DataGrid. Este ejemplo también indica que no se puede encontrar un registro.

Descripción de la técnica

Establecer el orden y buscar registros

Para usar el método DataView.Find con el fin de encontrar un registro, debe establecer el orden. En este ejemplo, al hacer clic en el encabezado de columna DataGrid, el DataGrid establece el orden automáticamente. El ejemplo usa la sintaxis para establecer el orden mediante programación, que es muy similar a la sintaxis de ORDER BY de SQL.
'Ejemplos: establecer el orden predeterminado. tblAuthors.DefaultView.Sort = "au_id" tblAuthors.DefaultView.Sort = "au_id" vAuthors.Sort = "au_id DESC" tblAuthors.DefaultView.Sort = "f_name,l_name"   ' multi-column sort/find
				
Los usuarios también pueden cambiar el orden visualmente si hacen clic en los encabezados de columna del DataGrid. Así, cuando los usuarios hacen clic en Buscar, utilizan ese orden de columna para realizar su búsqueda.

Nota:
La flecha del encabezado de columna indica el orden actual y la dirección de la flecha indica si el orden es ascendente o descendente.

Recuperar el orden actual mediante programación

Para recuperar el orden actual y actualizar el texto de Label, lea la propiedad DataView.Sort de la manera siguiente:
dv.Sort 

lblFind.Text = "Escribir criterios de búsqueda " & dv.Sort 'Se utiliza en este ejemplo para establecer la etiqueta.

Colocar el puntero del registro en un DataGrid

En este ejemplo se utiliza el método DataView.Find para recuperar la posición del registro y actualizar el objeto CurrencyManager. De este modo se sincroniza el puntero de la fila en el DataGrid. Si desea resaltar también la fila, puede usar el método DataGrid.Select.

En este ejemplo se usa el objeto CurrencyManager para manipular la moneda También puede utilizar la clase BindingManagerBase, que es la clase base para CurrencyManager. Todo el enlace de datos se realiza mediante clases DataView. Para sincronizar los controles y el CurrencyManager, los controles deben enlazarse al mismo DataView.
'Buscar el registro en DefaultView. 'Si se encuentra, mover el puntero al registro correcto de la cuadrícula. Dim i As Integer i = dv.Find(txtFind.Text) ' Busca el registro en DefaultView. ' No mover el puntero de la cuadrícula o CM. If i > dv.Table.Rows.Count Or i < 0 Then MsgBox("Registro no encontrado", MsgBoxStyle.Information, "Registro no encontrado") Else 'CM.Position = i  ' Sincroniza CM y el puntero de la cuadrícula. End If

Crear el ejemplo

  1. Inicie Microsoft Visual Studio .NET.
  2. Cree una nueva aplicación para Windows en Visual Basic .NET.
  3. Coloque un control DataGrid, un control Button, un control Label y un control TextBox en el formulario.
  4. En la ventana Propiedades, establezca las propiedades de los controles como se indica a continuación:
    Control Form
    Nombre: frmFind
    Tamaño: 800, 520
    Texto: Formulario de búsqueda

    Control Label
    Nombre: lblFind
    AutoSize: True
    Ubicación: 168, 456
    Texto: Escribir criterios de búsqueda au_id

    Control TextBox
    Nombre: txtFind
    Ubicación: 328, 456
    Tamaño: 216, 20
    Texto:

    Control Button
    Nombre: btnFind
    Ubicación: 560, 456
    Tamaño: 75, 32
    Texto: Buscar

    Control DataGrid1
    Nombre: grdFind
    Ubicación: 16, 8
    Tamaño: 760,432
  5. Utilice la instrucción Imports del espacio de nombres System.Data.SqlClient para que no tenga que calificar las declaraciones del espacio de nombres más adelante en el código. Debe utilizar esta instrucción antes que Public Class frmFind y que cualquier otra declaración. Agregue el código siguiente a la sección de declaraciones de frmFind:
    ' Crear espacio(s) de nombres Imports System.Data.SqlClient
  6. Agregue las siguientes declaraciones de variables a frmFind detrás de Public Class frmFind y delante del resto del código:
    ' Declarar variables Inherits System.Windows.Forms.Form ' Modificar esta cadena para conectar correctamente con SQL Server. Dim con As New SqlConnection("server=YourServerName;uid=YourUserId;" & _ "pwd=YourPassword;database=pubs") Dim daAuthors As New SqlDataAdapter("Select * From Authors", con) Dim ds As New DataSet() Dim WithEvents dv As DataView Dim CM As CurrencyManager
  7. Agregue el código siguiente al evento frmFind_Load:
    ' Recuperar datos de la tabla Authors. daAuthors.Fill(ds, "Authors") dv = New DataView(ds.Tables("Authors")) ' Enlazar los datos al DataGrid. grdFind.DataSource = dv 'Establecer el orden predeterminado. dv.Sort = "au_id" ' Inicializar CurrencyManager para contener una instancia del CurrencyManager del formulario. CM = frmFind.BindingContext(dv)
  8. Agregue el código siguiente al evento btnFind_Click:
    ' Comprobar que el usuario escribió una prueba para buscar. If txtFind.Text = "" Then MsgBox("Escriba un criterio para buscar.") txtFind.Focus() Else 'Buscar el registro en DefaultView. 'Si se encuentra, mover el puntero al registro correcto de la cuadrícula. Dim i As Integer i = dv.Find(txtFind.Text) ' Busca el registro en DefaultView. ' No mover el puntero de la cuadrícula o CM. If i > dv.Table.Rows.Count Or i < 0 Then MsgBox("Registro no encontrado", MsgBoxStyle.Information, "Registro no encontrado") Else 'CM.Position = i  ' Sincroniza CM y el puntero de la cuadrícula. End If End If
  9. Agregue el código siguiente al evento dv_ListChanged:
    ' Eliminar DESC de la cadena dv.Sort si el usuario ha establecido el orden descendente. ' Esto permite que Label2.Text se muestre correctamente. If dv.Sort.Substring((Len(dv.Sort) - 4), 4) = "DESC" Then lblFind.Text = "Escribir criterios de búsqueda " & dv.Sort.Substring(0, Len(dv.Sort) - 5) Else lblFind.Text = "Escribir criterios de búsqueda " & dv.Sort End If
  10. En el Explorador de soluciones, seleccione el proyecto para establecer frmFind como formulario de inicio.

    Nota:
    De forma predeterminada, el proyecto se denomina WindowsApplication1. Para cambiar el nombre del formulario, haga clic en Propiedades en el menú Proyecto. En el cuadro de lista desplegable Objeto inicial, haga clic en frmFind y, después, haga clic en Aceptar para guardar los cambios.
  11. Guarde y ejecute la aplicación.
  12. Haga clic en el encabezado de DataGrid para cambiar el orden. Escriba criterios en el cuadro de texto y haga clic en Buscar. Observe que el puntero del registro está colocado correctamente en el DataGrid.

Referencias

Para obtener más información acerca de ADO.NET, el objeto DataSet, los métodos de este artículo y SQL, visite los siguientes sitios Web de Microsoft:
ADO.NET para el programador de ADO
http://www.microsoft.com/spanish/msdn/articulos/archivo/180501/voices/adonetdev.asp

Clase BindingManagerBase
http://msdn2.microsoft.com/en-us/library/system.windows.forms.bindingmanagerbase(vs.71).aspx

Clase CurrencyManager
http://msdn2.microsoft.com/en-us/library/system.windows.forms.currencymanager(vs.71).aspx

Clase PropertyManager
http://msdn2.microsoft.com/en-us/library/system.windows.forms.propertymanager(vs.71).aspx

Clase DataView
http://msdn2.microsoft.com/en-us/library/system.data.dataview(vs.71).aspx

Centro de desarrollo de MSDN Online .NET
http://www.microsoft.com/spanish/msdn/netframework/default.asp
Para obtener más información al respecto, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
168336 Cómo abrir objetos Connection y Recordset de ADO

Propiedades

Id. de artículo: 308070 - Última revisión: domingo, 13 de mayo de 2007 - Versión: 3.2
La información de este artículo se refiere a:
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft ADO.NET 1.1
Palabras clave: 
kbhowtomaster KB308070

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com