Chalalo Land

Tecnologías ASP.NET y un poco Más

Contacto

Siempre al Día!:

Suscribirse al Blog!

Consultas Técnicas:


En Twitter!


Comunidades Técnicas Chile:

De donde me Visitan?

Locations of visitors to this page

Tech days 2009

CMC

Recent Posts

Tags

Community

Blogs de MVP

Blogs Microsoft

Amigos Geeks

Blogs Imperdibles

GODS

Team Ajax Control Toolkit

Mi Trabajo

Archives

Email Notifications

Hot Topics

[Tips] Filtrar un Gridview con Jquery al presionar una tecla :)

Necesitaba filtrar un gridview al más estilo Windows Form, en donde presionas una tecla y luego se va filtrando la grilla, en mi caso , era sobre los datos que estaban ya en la página, por lo que no iba a tener que darme la vuelta de Marte(el server) y volver con los datos por cada tecla presionada.

Entonces, encontré esta página, como la explicación está en ingles, yo te la doy en español, y vamos a ver como funciona :).

http://kobikobi.wordpress.com/2008/09/15/using-jquery-to-filter-table-rows/

1.- Primer paso
Vamos a utilizar un GridView junto a un input type=”text”, no vamos a utilizar un webcontrol, aunque podrías, no hay problema.

image

2.-Importar la Librería JQuery

<script src="Scripts/jquery-1.3.2.min.js" type="text/javascript"></script>

 

 

3.- Código Fuente

<script language="javascript" type="text/javascript">
      $(document).ready(function() {
            //agregar una nueva columna con todo el texto
            //contenido en las columnas de la grilla
           // contains de Jquery es CaseSentive, por eso a minúscula

      $(".filtrar tr:has(td)").each(function() {
      var t = $(this).text().toLowerCase(); 
                $("<td class='indexColumn'></td>")
                .hide().text(t).appendTo(this);
            });

            //Agregar el comportamiento al texto (se selecciona por el ID)
            $("#texto").keyup(function() {
                var s = $(this).val().toLowerCase().split(" ");
                $(".filtrar tr:hidden").show();
                $.each(s, function() {
                     $(".filtrar tr:visible .indexColumn:not(:contains('"
                     + this + "'))").parent().hide();
                }); 
            }); 
        });

     </script>

4.- Saber como funciona el código (si ya sabes, te lo saltas)

Ahora la explicación del código, como la mayoría de la gente que ve este blog son estudiantes, siempre recomiendo entender el código antes de solo pegarlo, o si no nos transformamos en simples copy-pasteros :P

      $(document).ready(function() {

JQuery nos da brinda esta función que nos va a servir para agregar el código que está dentro del ámbito una vez que la página este cargada completamente (Render listo).

   $(".filtrar tr:has(td)").each(function() {
      var t = $(this).text().toLowerCase(); 
                $("<td class='indexColumn'></td>")
                .hide().text(t).appendTo(this);
            });

 

Lo que hizo el autor del código fue obtener todas los td de los tr (".filtrar tr:has(td)") y recorrerlos uno por uno (each) y atacharle el siguiente comportamiento: la variable t, va a obtener el texto de cada td pasado a minúsculas, luego crea un td adicional en donde deja todo el texto(text(t).appendTo(this); y le agrega el atributo class='indexColumn' de manera de poder identificarlo para la búsqueda, además oculta esta columna(hide).

$("#texto").keyup(function() {
    var s = $(this).val().toLowerCase().split(" ");
    

En esta parte de código se le atacha el comportamiento en el evento keyup al textbox que tenemos (cuyo id es “texto”), ahora el arreglo s tiene el valor de lo que está escrito en la caja (la primera vez una sola letra o número) , se transforma a minúsculas (recuerda que toda la columna nueva está con letras minúsculas, y el contains de Jquery es Case Sensitive) . Esto se transforma en un arreglo, si es que hay un espacio “hola como estas”, mediante la función Split Ej: S[0]=”hola”,S[1]=”como”,S[2]=”estas”.

   $(".filtrar tr:hidden").show();

Esta línea nos va a servir para  volver a mostrar los TR que ocultamos ya que no concordaban con la búsqueda y que,  al volver con el backspace deberían aparecer nuevamente.

$.each(s, function() {
        $(".filtrar tr:visible .indexColumn:not(:contains('"
        + this + "'))").parent().hide();
     }); 

Ahora, por cada elemento dentro del Arreglo, vamos a filtrar todos los tr visibles (obvio, los invisibles ya no nos sirven), en donde la columna oculta .indexColum no contenga el contenido del arreglo s, como el final del selector fue un td, llamamos al parent() (tr) y lo ocultamos.

5.-Últimos ajustes

Con esto me refiero a lo que debes tener en la grilla y es super simple, si te diste cuenta se selecciona por clase .filtrar, por lo que tu grilla debe contar con ese atributo:

<asp:GridView ID="GridView2" class="filtrar" runat="server" …

 

6.-Resultado

image

Video:

 

Espero que te haya sido útil, recuerda que esto te sirve para php también, próximamente subo los ejemplos de filtrar por una sola columna.

Saludos,
Gonzalo

Get Microsoft Silverlight
Posted: 22/5/2009 19:15 por Gonzalo Perez | con 33 comment(s)
Archivado en: ,,

Comentarios

preguntoncojonero ha opinado:

Viene el código de servidor C# en el ejemplo ?

Saludos

# May 25, 2009 9:51 AM

Gonzalo ha opinado:

Viene el còdigo declarativo (Binding) :), sirve para VB.NET y C#.

# May 25, 2009 1:59 PM

Marcelo ha opinado:

Consulta, tendra algun archivo como modelo para ver, porque soy novato y con solo este ejemplo la verdad no entendi nada, gracias

# June 3, 2009 10:07 PM

Gonzalo Perez ha opinado:

Voy a subir el ejemplo, o si quieres postea tu email y te envío el ejemplo

# June 4, 2009 5:00 AM

Marcelo ha opinado:

Gracias Gonzalo, te paso mi mail c____@gmail.com, lo unico te pido que borres mi mail del post para que no le figure a todo el mundo, gracias de nuevo

# June 4, 2009 3:26 PM

Ricardo ha opinado:

Disculpa no logro hacer ese proceso, de antemano te comento que recien empiezo con esto, me gustaria implantar este proceso por que es fenomenal, yo vengo de programar buen tiempo en Windows, y la verdad que esta herramienta es muy buena pero me esta costando como te digo. podrias poner un link donde ver mas ejemplos de este tipo.

de antemano muchas gracias.

# June 11, 2009 4:54 PM

Gonzalo Perez ha opinado:

Hola Ricardo, si deseas me envias un correo a chalalo arroba hotmail punto com (lo escribo asi por el correo basura) y te envio el ejemplo ,vale?

saludos,

gonzalo

# June 11, 2009 5:50 PM

Ricardo ha opinado:

Te acabo de enviar, gracias por la atención.

Slds.

# June 11, 2009 7:27 PM

Ricardo ha opinado:

Gracias Gonzalo, he recibido tu mail ya lo implante,  esta muy bueno esto, la verdad que si.

Gracias nuevamente.

Saludos.

# June 12, 2009 5:34 PM

Gonzalo Perez ha opinado:

De nada Ricardo! que bueno que te fue de ayuda.

Saludos,

Gonzalo

# June 12, 2009 9:13 PM

cafe ha opinado:

Puedes subir el codigo, por que no me funciona ami con lo que pusiste, soy nuevo en esto,  falta algun codigo en vb o C# para que funvione

# July 10, 2009 7:49 PM

Norberto ha opinado:

Que tal Gonzalo,

ya revise el ejemplo y funnciona muy bien, solo un detalle, la pregunta es si lo corriste en IE8, ya que en modo de compatibilidad el backspace funciona pero sin la compatibilidad no :S

pienso que es cosa del framework de jquery, pero seguire revisando a ver si encuentro porque sucede esto.

Saludos!!

# July 10, 2009 9:11 PM

Gonzalo Perez ha opinado:

@Norberto, creo que lo probé en IE8, voy a buscar el ejemplo y te cuento

@cafe: subo el ejemplo durante la tarde(chile)

# July 12, 2009 1:41 AM

Chururuy (Jesus Garibay Ceja) ha opinado:

Oye? funciona muy bien, pero si me interesa el ejemplo por columna, porque tengo mas de 3000 registros en un catalogo de mensajes, y se tarda algo en filtrarlo de esta manera.

Saludos.

# July 15, 2009 11:24 PM

Gonzalo Perez ha opinado:

Habría que modificar el jquery, el selector, dejame verlo, pero 3000 registros en la página?

# July 16, 2009 1:34 AM

darkchicles ha opinado:

Hey Muchas gracias este TIP lo encontre gracias a NOR http://mspnor.wordpress.com/, buscaba algo asi de facil desde hace ya un tiempo...  =D Grax...

# July 17, 2009 8:21 PM

Chururuy (Jesus Garibay Ceja) ha opinado:

Si perdon, es que es un catálogo de idiomas.

Saludos =).

# July 20, 2009 5:40 AM

Carlos ha opinado:

Muy bueno tu ejemplo , pudes subir el codigo , o me lo puedes enviar a mi correo , estare muy agradecido , my correo es carlos2025a@gmail.com

# July 26, 2009 6:56 AM

Gonzalo Perez ha opinado:

Ya te lo envié, cuentame como te va.

Saludos

Gonzalo

# July 26, 2009 5:02 PM

Gustavo ha opinado:

si tengo mi grid paginado como lo recorro para hacer la busqueda,,?

# July 27, 2009 5:32 PM

Gonzalo Perez ha opinado:

Gustavo, este ejemplo es solo para los datos que estan dibujados en la página, por lo que si estas paginanando, te va a servir un like normal del lado del servidor, pero mucho más lento.

# July 27, 2009 5:57 PM

johanna ha opinado:

hola me gustaria saber como hacer el mismo filtro pero en C#.net.

Lo que necesito es ingresar un texto en un textbox y a medida que ingreso una letra me vaya filtrando en una columna de un datagrid.

Si me pueden ayudar,se los agradezco

# August 14, 2009 6:58 PM

Gonzalo Perez ha opinado:

En ese caso es distinto , puedes tener en un textbox, en el avento keypressed, un método que a partir de lo que se escribe, haga una consulta con Like en el where, y haciendo el databind, pero recuerda que si estas en asp.net deberías usar ajax, pero el costo de recursos no es menor

# August 15, 2009 2:53 AM

Johanna ha opinado:

Muchas gracias, estoy usando WPF y C#, lleno la grilla usando datagrid, no uso databind porq no se como se usa...

# August 18, 2009 6:13 PM

Gonzalo Perez ha opinado:

Hola, te recomiendo ver este blog para WPF, Héctor puede ayudarte :)

hectorperez.wordpress.com

Saludos,

Gonzalo

# August 20, 2009 3:07 AM

Samuel ha opinado:

Saludos Gonzalo si no es mucho pedir sera que puedes poner un link para la descarga para entenderlo mejor porque esto esta muy bueno..

# August 26, 2009 4:59 AM

Julio Vilca ha opinado:

Muy bueno el ejemplo. Por favor, podrías enviarme el ejemplo tambien?. Recién estoy viendo lo del jquery y veo que es una escelente herramienta. Mi correo es julio.vilca@gmail.com

Muchas gracias

Julio Vilca

# October 16, 2009 5:59 AM

Carlos ha opinado:

Gonzalo muy bueno el tip. Funciona perfecto!

Muchas gracias.

Carlos

# November 24, 2009 4:08 AM

Gonzalo Perez ha opinado:

de nada! :)

# November 26, 2009 3:43 AM

Mayra ha opinado:

Hola sabes es justo lo que busco, pero te cuento que no me fuciona muy bien bueno espero me puedas enviar el ejemplo si no es mucho abuso o molestia te lo agradeceria un mundo, y espero me puedas responder ya que para que este post esta un cpo tarde mi favor...

Gracias gracias de antemano... mi correo es mayca1984@hotmail.com

# February 12, 2010 9:38 PM

Luis Alberto ha opinado:

Tengo una duda, espero me puedan ayudar.

Ya realize los pasos señalados, ya tengo la aplicacion y funsiona bien al escribir -si filtra- pero al dar backspace no regresa las celdas ocultas.

Saludos

# February 22, 2010 6:59 PM

Gonzalo Perez ha opinado:

Luis, en que navegar, y en que modo (si es que es IE8) lo estas ocupando? (compatibilidad o normal?)

# February 22, 2010 10:06 PM

Enzo ha opinado:

Gonzalo se ve bueno el Video, hago todo lo que tu explicas muy didacticamente por cierto, pero no me funciona, que podar ser, podrias mandarne el proyecto para verlo en mi pc...

te dejo mi correo flaco_enzo arroba hotmail.com lo dejo asi por lo que tu comentabas...

desde ya te agradezco

# March 12, 2010 4:00 PM
Deja tu comentario

(requerido) 

(requerido) 

(opcional)

(requerido)