Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Misterio con un listview al utilizar su propio search (https://www.clubdelphi.com/foros/showthread.php?t=92438)

nincillo 29-10-2017 09:27:12

Misterio con un listview al utilizar su propio search
 
Buenos días. Tengo un misterio que no consigo resolver.

Tengo un listview en el que cargo el contenido de un TFDMemTable mediante un bucle while not eof.

Al finalizar el bucle muestro tanto el recordcount como el items.count y me dan el mismo número. Hasta ahí todo normal.

Tengo un botón para refrescar el listview haciendo cada vez un close y un open de la tabla.

Da igual las veces que le de al botón refrescar, que cuando escribo por primera vez en el recuadro del search del propio listview me encuentra todos los registros que cumplen la condición.

El problema se presenta tras escribir en el search. A partir de ese momento, si vuelvo a dar al botón de refrescar, el listview ya no me muestra todos los registros que debiera. Si embargo, el recordcount y el items.count siguen marcando lo mismo que al principio. O sea, es como si parte de los registros no estuvieran visibles.

AgustinOrtu 29-10-2017 15:43:04

Hola nincillo, no termine de entender el problema. Creo que tu escenario es este:

1. Traes todos los datos, ej count = 100
2. Escribes en el search
3. Ejecutas el refrescar, ahora count = 10
4. Limpias el search y das a refrescar, count = 10 y deberia ser 100

Podrias poner el codigo?

nincillo 31-10-2017 07:08:40

Cita:

Empezado por AgustinOrtu (Mensaje 522112)
Hola nincillo, no termine de entender el problema. Creo que tu escenario es este:

1. Traes todos los datos, ej count = 100
2. Escribes en el search
3. Ejecutas el refrescar, ahora count = 10
4. Limpias el search y das a refrescar, count = 10 y deberia ser 100

Podrias poner el codigo?

Al final creo que ya he encontrado el origen del problema y la solución.

Basícamente el problema parece ser que en cuanto se escribe en el filtro, algo se queda "memorizado" en el interior, que aunque se borre manualmente el filtro, se borren los items, al volver a cargar la lista, parece que el filtro previo anda por ahí "dentro" haciendo de las suyas.

Parace que funcione correctamente el cada vez que se vaya rellenar la listview, previamente insertar los registros hay que hacer lo siguiente:

Código:

  (* Fundamental para que haga el refresco del listview completo y no se queden registros ocultos *)
  dm.qryAlmacen.Active := false;
  (* Con esto buscamos el componente donde escribimos el filtro para vaciarlo *)
  for I := 0 to ListView2.Controls.Count-1 do
    if ListView2.Controls[i].ClassType = TSearchBox then
    begin
      TSearchBox(ListView2.Controls[i]).Text := '';
      Break;
    end;
  (* Con esto inicializo el filtro y es con lo que relamente soluciono el problema *)
  ListView2.Items.Filter := nil;
  (* Vuelvo a cargar los registros en el listview *)
  dm.qryAlmacen.Active := true;


AgustinOrtu 31-10-2017 20:06:48

Crei que hablabamos del ListView de la Vcl. El de firemonkey he visto por ahi algunas variables con nombres estilo "filtered items", por lo que si es posible que sea algo de lo que comentas


La franja horaria es GMT +2. Ahora son las 14:28:56.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi