Buscar un Dato en un DataGridView

Lo primero es desearos un buen año 2011, a ver si nos da cosas mejoras que 2010!

Bueno esta entrada viene como consecuencia de repetidas preguntas acerca de una buscada de un valor en el control DataGridView.

Os voy a exponer en (VB  mañana cuelgo el código en c#) dos formas de hacerlo: la forma tradicional, y a través de LINQ:

Forma Tradicional
  1. Function Buscar(ByVal TextoABuscar As String, ByVal Columna As String, ByRef grid As DataGridView) As Boolean
  2.         Dim encontrado As Boolean = False
  3.         If TextoABuscar = String.Empty Then Return False
  4.         If grid.RowCount = 0 Then Return False
  5.         grid.ClearSelection()
  6.         If Columna = String.Empty Then
  7.             For Each row As DataGridViewRow In grid.Rows
  8.                 For Each cell As DataGridViewCell In row.Cells
  9.                     If cell.Value.ToString() = TextoABuscar Then
  10.                         row.Selected = True
  11.                         Return True
  12.                     End If
  13.                 Next
  14.             Next
  15.         Else
  16.             For Each row As DataGridViewRow In grid.Rows
  17.                 If row.IsNewRow Then Return False
  18.                 If row.Cells(Columna).Value.ToString() = TextoABuscar Then
  19.                     row.Selected = True
  20.                     Return True
  21.                 End If
  22.  
  23.             Next
  24.         End If
  25.         Return encontrado
  26.     End Function

Forma LINQ:

Forma LINQ
  1. Function BuscarLINQ(ByVal TextoABuscar As String, ByVal Columna As String, ByRef grid As DataGridView) As Boolean
  2.         Dim encontrado As Boolean = False
  3.         If TextoABuscar = String.Empty Then Return False
  4.         If grid.RowCount = 0 Then Return False
  5.         grid.ClearSelection()
  6.         If Columna = String.Empty Then
  7.             Dim obj As IEnumerable(Of DataGridViewRow) = From row As DataGridViewRow In grid.Rows.Cast(Of DataGridViewRow)()
  8.                       From celda As DataGridViewCell In row.Cells
  9.                         Where celda.OwningRow.Equals(row) And celda.Value = TextoABuscar
  10.                         Select row
  11.             If obj.Any() Then
  12.                 grid.Rows(obj.FirstOrDefault().Index).Selected = True
  13.             End If
  14.  
  15.         Else
  16.             Dim obj As IEnumerable(Of DataGridViewRow) = From row As DataGridViewRow In grid.Rows.Cast(Of DataGridViewRow)()
  17.                                              Where row.Cells(Columna).Value = TextoABuscar
  18.                         Select row
  19.             If obj.Any() Then
  20.                 grid.Rows(obj.FirstOrDefault().Index).Selected = True
  21.             End If
  22.  
  23.         End If
  24.         Return encontrado
  25.     End Function

 

En C#:

Forma Normal
  1. bool Buscar(string TextoABuscar,string Columna, DataGridView grid)
  2. {
  3.     bool encontrado=false;
  4.     if (TextoABuscar==string.Empty) return false;
  5.     if (grid.RowCount == 0 ) return false;
  6.     grid.ClearSelection();
  7.     if (Columna==string.Empty)
  8.     {
  9.         foreach (DataGridViewRow row in grid.Rows)
  10.         {
  11.             foreach (DataGridViewCell cell in row.Cells )
  12.                 if (cell.Value==TextoABuscar)
  13.                 {
  14.                     row.Selected = true;
  15.                     return true;
  16.                 }
  17.         }
  18.     }
  19.     else
  20.     {
  21.         foreach (DataGridViewRow row in grid.Rows)
  22.         {
  23.            
  24.                 if (row.Cells[Columna].Value==TextoABuscar)
  25.                 {
  26.                     row.Selected = true;
  27.                     return true;
  28.                 }
  29.         }
  30.     }
  31.     return encontrado;
  32. }

 

Forma LINQ
  1. bool BuscarLINQ(string TextoABuscar,string Columna, DataGridView grid)
  2.         {
  3.             bool encontrado=false;
  4.             if (TextoABuscar==string.Empty) return false;
  5.     if (grid.RowCount == 0 ) return false;
  6.     grid.ClearSelection();
  7.     if (Columna==string.Empty)
  8.     {
  9.         IEnumerable<DataGridViewRow> obj= (from DataGridViewRow row in grid.Rows.Cast<DataGridViewRow>()
  10.                                            from DataGridViewCell cells in row.Cells
  11.                                            where cells.OwningRow.Equals(row) && cells.Value==TextoABuscar
  12.                                            select row);
  13.         if (obj.Any())
  14.         {
  15.             grid.Rows[obj.FirstOrDefault().Index].Selected=true;
  16.             return true;
  17.         }
  18.  
  19.     }
  20.     else
  21.     {
  22.          IEnumerable<DataGridViewRow> obj= (from DataGridViewRow row in grid.Rows.Cast<DataGridViewRow>()
  23.                                            where row.Cells[Columna].Value == TextoABuscar
  24.                                            select row);
  25.         if (obj.Any())
  26.         {
  27.             grid.Rows[obj.FirstOrDefault().Index].Selected=true;
  28.             return true;
  29.         }
  30.             
  31.         }
  32. return encontrado;
  33.         
  34.  
  35.     }

La cabecera del método recibe como parámetros el valor a Buscar, la Columna a Buscar (si no se especifica buscará en todas las columnas), y el DataGridView donde se va a buscar.

 

Bueno espero que os sea de utilidad.

PD: Otra forma más que interesante de hacerla es como comenta Enrique Martínez en este enlace.

4 comentarios sobre “Buscar un Dato en un DataGridView”

  1. Hola Jose,

    ¿Qué versión de Framework estás utilizando?

    Para poder utilizar el ejemplo de LINQ es necesario que este incluido el namespace System.Linq

Responder a jtorrecilla Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *