Chalalo Land

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

Contacto


 Si quierer cooperar, yo feliz, muy agradecido :)

De donde me Visitan?

Locations of visitors to this page

Generic Content

Si te gustaron los articulos, y te animas te estaría muy agradecido!


Recent Posts

Tags

Community

Blogs de MVP

Amigos Geeks

Blogs Imperdibles

GODS

Archives

Email Notifications

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

Update: La posibilidad de filtrar y que no desaparesca la paginación y la descarga del código está en:
http://geeks.ms/blogs/gperez/archive/2011/04/10/tips-filtrar-un-gridview-con-jquery-al-presionar-una-tecla-y-no-filtra-el-pager.aspx

 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

Posted: 22/5/2009 19:15 por Gonzalo Perez | con 78 comment(s)
Archivado en: ,,
Comparte este post:

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

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

andy ha opinado:

hola amigo esta muy bueno el ejemplo lo e probado y esta bien pero tengo mi grid paginado lo e probado con like en el servidor y nada podrias ayudarme porfavor...

# April 28, 2010 10:59 PM

Gonzalo Perez ha opinado:

Andy, no he modificado esto para que funcione con Paginación, voy a revisarlo.

# April 29, 2010 1:30 AM

Fabián ha opinado:

Excelente el ejemplo, recién acabo de migrar a desde PHP a .NET con JQuery y el ejemplo esta muy bueno, estimado si no es mucho pedir, tiene algunos tips o algun docto en donde especifique una metodología de programación para construir un software a nivel profesional, por ejemplo, el ordeanmiento de las clases, relaciones con Jquery,Master Page...

salu2

ricardo.f.zuniga@gmail.com

# June 1, 2010 4:16 AM

Gonzalo Perez ha opinado:

@Fabian,

Contestado por correo!

# June 1, 2010 4:34 AM

Edwin ha opinado:

bueno amigo funciona asi en un webform normal, pero si tu lo haces desde una pagina que herede del master page, pues tu codigo no funciona para ese caso.

Haber si lo solucionas amigo.

Por lo demas saludos

# June 5, 2010 4:10 PM

Gonzalo Perez ha opinado:

Edwin, revisa el clientId generado para tu control , al estar dentro de una master page, seguramente cambio, me imagino qe ya no se llama $("#texto")

Saludos,

# June 6, 2010 6:27 AM

kelvin ha opinado:

no me sale tu ejemplo, hice todo lo q dices y nada de nada.....

Me podrias enviar el codigo, el javascript mas tu ejemplo, porfavor, gracias.

# June 24, 2010 7:12 AM

Gonzalo Perez ha opinado:

Kelvin,

Cual es tu correo , para enviarte el código?

# June 24, 2010 3:04 PM

Robert ha opinado:

Excelente Ejemplo, yo tengo un problemita con los filtros, sucede que necesito adicionar 2 filas en la cabecera una sobre el Header y otro debajo, en la primera fila agregar un checkbox que me servirá según su estado  para agregar la segunda fila con controles para filtrar por columna. Espero me puedas ayudar. toda idea será bienvenida. Saludos

# June 24, 2010 11:36 PM

alejo ha opinado:

amigo ayudame con esto mira me sucede esto.

si la tabla se carga desde el load con datos funcina pero si al inicio no tengo nada en el form u hago una busqueda con campos del textbox y presiono click ahi me recupera los datos en el gridview ya no funciona esto de buscar no se ayudame para poder hacer esto... no se si me explico, mi correo es jaleks2012@hotmail.com

# June 25, 2010 10:34 PM

nestba ha opinado:

hola amigo como estas el ejemplo esta muy bien pero tengo una duda el ejemplo funciona solo para los datos  que esta en la pagina como tal, pero si tengo paginado mi grid como hago para que me filtre por favor podrias ayudarme si... gracias....

# July 20, 2010 6:48 PM

Gonzalo Perez ha opinado:

Hola nestba,

Voy a ver como hacerlo, hay que modificar los selectores, para que no tome el tr en donde esta la paginación.

# July 21, 2010 3:51 PM

Gonzalo Perez ha opinado:

Hola nestba,

Voy a ver como hacerlo, hay que modificar los selectores, para que no tome el tr en donde esta la paginación.

# July 21, 2010 3:51 PM

nestba ha opinado:

gracias amigo .... soy nuevo en esto de jquery y asp.net por eso la duda con el ejemplo igual gracias y sigue adelante con esos aportes que son muy interesantes.....

# July 21, 2010 10:33 PM

Renato ha opinado:

Estimado encuentro genial que puedas hacer esto con jquery.

Si me puedes enviar el codigo para aplicar este codigo en un user control sería fantastico.

mi correo

l r m o r e n o r @ g m a i l . c o m

Gracias

# July 27, 2010 7:39 AM

Gonzalo Perez ha opinado:

Enviado!!!!

# July 27, 2010 3:35 PM

Nelson ha opinado:

Hola una consulta , soy nuevo en .net y no sé donde colocar el codigo que expusiste... me podrias ayudar?

# August 17, 2010 6:47 PM

Nelson ha opinado:

Hola soy nuevo en .net  y no sé donde colocar el codigo que expusiste, me podrias ayudar? en que secciones de codigo deben ir ?

saludos

# August 17, 2010 6:49 PM

Gonzalo Perez ha opinado:

Nelson,

Envíame tu email y te envío el ejemplo

# August 18, 2010 4:02 AM

Nelson ha opinado:

OK, mi mail es n3lsok@gmail.com, te cuento que tengo el webform en una webmaster, por lo que en el webform no tengo codigo html, la webmaster contiene el codigo html.

# August 18, 2010 11:20 PM

Cristian ha opinado:

 Hola gonzalo te cuento he intentado de todas las maneras posibles implementar tu ejemplo pero no me resulta me podrias enviar el script con el codigo de ejemplo, mi correo es diclou21@hotmail.com

# August 19, 2010 2:48 PM

Gustavo ha opinado:

Hola estoy tratando de probar tu ejemplo en un un gridview de asp net con paginacion  page y no mefunciona me podrias regalar tu codigo o como haria mi correo es gusinocencio@hotmail.com

# September 1, 2010 12:42 AM

Gonzalo Perez ha opinado:

Enviado!, Generalmente el por que no funciona es debido a la generación del ClientID, hay que fijarse en ello.

# September 1, 2010 3:06 PM

Luis Escobar ha opinado:

Gracias por el aporte.. funciona al 100.. saludos :P

# September 3, 2010 11:17 PM

Noe Herrera ha opinado:

Buen aporte, me podrias enviar tu codigo...saludos y felicitaciones.

noe.herrerat@gmail.com

# October 1, 2010 7:47 PM

Gonzalo Cruz ha opinado:

Porfavor me seria de gran utilidad que me mandaras el ejemplo a mi correo....te loa gradeceria bastante!!!

g o n t x i l l o @g m a i l . c o m

# October 28, 2010 9:44 AM

Susana ha opinado:

Hola, acabo de intentarlo pero me filtra también el nombre de las columnas, como puedo solucionarlo?

Muchas gracias de antemano

# October 28, 2010 1:02 PM

Gonzalo Perez ha opinado:

Postea un correo y te envío el ejemplo :)

# October 28, 2010 1:58 PM

Susana ha opinado:

Hola Gonzalo, te cuento lo que quiero hacer por si tienes un ejemplo de eso, es filtrar un grid por datos de las columnas, si es mayor menor que un numero... y a poder ser que los filtros puedan unirse, es decir que sean mayores que la columna A y menor para la columna B. Creo que no me explico nada de nada....

De todas formas por ahora con que no me filtre el encabezado de las columnas me vale :)

Mi mail es susanamartinezj@gmail.com

Muchas gracias de antemano.

Saludos.

# October 28, 2010 4:52 PM

Giovani ha opinado:

Hola buenas tardes, te agradezco si me colabroas enviandome el codigo al correo jsoriano30hotmail.com , si tiene el ejemplo pero para realizar la bùsqueda por columnas, aùn mejor.

Muchas gracias.

# November 9, 2010 9:09 PM

Juan Pablo ha opinado:

Hola estoy probando pero sale error: Error en tiempo de ejecución de Microsoft BLOCKED SCRIPT Se esperaba un objeto?

Me podrias pasar el codigo completo por correo gracias

Juan Pablo

# December 1, 2010 5:35 PM

ivonsue ha opinado:

^__^ Muchas gracias por el aporte, me funciono EXCELENTE!!

# December 28, 2010 12:37 AM

Gonzalo Perez ha opinado:

Juan Pablo,

Dame un correo para enviarlo,

# December 28, 2010 1:07 PM

Leticia ha opinado:

Hola Gonzalo, espero que te estes muy bien

Sino es mucha molestia me podrias mandar el codigo por Correo.

De antemano muchas gracias!!!

pienso_en_ti_corazon@hotmail.com

# January 19, 2011 11:58 PM

Arthuro Zerda ha opinado:

hola gonzalo, este tema esta muy bien, me ayudo a darme una idea, veras el codigo me marca un error al intentar importar la libreria, sera por la vercion de vs? uso vs2005, ademas me gustaria que me enviaras tu ejemplo me seria de gran ayuda, llevo poco programando y mas aun con lo que este relacionado con java script

arthuro.zerda@hotmail.com

espero respuesta

saludos!!

# February 1, 2011 7:46 PM

Luis Flores ha opinado:

Que tal Gonzalo!!! Oye alguna idea de como hacer este filtrado en un GRIDVIEW paginado... Por Fa! =] "Estaba buscándote en el IM pero no te vi conectado juju"

# March 23, 2011 6:21 PM

Gonzalo Perez ha opinado:

Hola Luis,

Ya conversamos, jejej, este fin de semana me aplico!

# March 24, 2011 1:42 PM

Fernando Valdés ha opinado:

Buen ejemplo, pero que pasa cuando tienes un mundo de 500.000 registros y filtras en el navegador del cliente, o por ejmplo si tengo paginado mi gridview por la gran cantidad de información, recuerda que en la paginación la grid se actualiza en la pagina trasera, no en el nevegador del cliente.

# April 11, 2011 2:43 PM

Gonzalo Perez ha opinado:

Hola Fernando,

La idea de este ejemplo es filtrar en los datos que se muestran en el cliente, mostrar 500000 me parece un error tremendo, segundo, se debe utilizar siempre paginación eficiente en las grillas, es decir, si muestras 20 o 30 en la grilla, no vas a buscar 500.000 y solo muestras 30 dejando 499.970 fuera, y que sin embargo obtuviste.

Te recomiendo leer:

geeks.ms/.../paginando-eficientemente-en-asp-net.aspx

Saludos,

# April 11, 2011 6:06 PM

maicol ha opinado:

gonzalo tu respondes a 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..... la verdad esa parte no entendi .. pues se puede buscar en toda la grilla ... aunque este paginada? ... hay modo de hacerlo.... bueno saludos y muy bueno ...

# May 9, 2011 7:23 PM

alberto ha opinado:

Si quiero filtrar por algun td en especial como seria la implementacion?

# July 7, 2011 6:15 PM

Lionell Oconner ha opinado:

Hola Gonzalo, me parece muy interesante esta ayuda, pero hay alguna posibilidad de que me puedas enviar una copia de un ejemplo?

mi correo es lord lionell arroba hotmail punto com

te agradeceria mucho... ya que esta ayuda me es util en un proyecto de la U

# August 23, 2011 6:27 PM

robbiee77 ha opinado:

Hola Gonzalo,

El código va de lujo, la verdad es que es justo lo que necesitaba, y puesto que de jquery no controlo mucho, me viene muy bien... El problema que tengo es el mismo que ya te han comentado varios compañeros, pero al que no he visto contestación... Si el gridview está paginado ¿cómo se puede hacer para que el filtrado de las filas no solo se haga en la página actual sino en todas las que contenga el grid?

A ver si me puedes echar un cable... GRACIAS!!

# October 20, 2011 6:03 PM

marysthel ha opinado:

Hola... Gonzalo :/ hice todos los  pasos y copie el codigo, pero no me funciona... yo uso el jquery 1.4.1 no creo que ese sea el problema.. yo no se mucho de jquery ojalá  me puedas ayudar

# October 25, 2011 7:47 PM

Gonzalo Perez ha opinado:

Robbiee77 la solución está en este post

geeks.ms/.../tips-filtrar-un-gridview-con-jquery-al-presionar-una-tecla-y-no-filtra-el-pager.aspx

Es eso lo que necesitas??

MaryShel, revisa en el codigo generado cual es el clientID, el cual se utiliza en el selector de JQuery.

# October 27, 2011 4:54 PM

mauricio2121 ha opinado:

Buenas noches Gonzalo...

esto esta muy bueno,,pero cuando tu tienes el codigo dentro de una master page no funciona...es mas si agregaramos un formulario menos..ya que por defecto en la master ya tenemos un formulario...por ay vi una respuesta que le diste al compañero edwin,,,pero no entendi nada y que por ningun lado encontre la propiedad clientid de algun control,,,,,mi correo es ingenieromauriciogarcia@gmail.com.-.......agradezco me colabores lo mas pronto posible

# January 15, 2012 6:11 AM