Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Buscar en ListView y mostrar solamente los datos encontrados. (https://www.clubdelphi.com/foros/showthread.php?t=82673)

wolfran_hack 02-04-2013 01:07:27

Buscar en ListView y mostrar solamente los datos encontrados.
 
Buenas a todos, tremendo foro, pero algo que me esta matando es tratar de realizar la siguiente acción:

1.- Tenemos un ListView, con dos columnas (Nombres y DNI).
2.- Se necesita buscar en el ListView Nombres registrados varias veces o que ya esta registrado.
3.- La Idea es Buscar mediante un Edit1.Text el valor que queremos y que de los 650 valores que tenemos actualmente, que se guardan a un csv, eliminar "de la lista" los que no queremos ver y así obtener el resultado de la búsqueda. Habia pensado de la siguiente manera:

Código Delphi [-]
procedure frmMain.btnBuscarClick(Sender: TObject);
var
i: Integer;
begin
for i:= 0 to Lista.items.count -1 do
begin
  if Lista.items[i].Subitems[0] = Edit1.Text then
     begin

     end
  else
     begin
        Lista.Selected.Delete;
     end;
end;

Pero no logro hacer que funcione. Directamente se cuelga el programa.

Cualquier ayuda, se las agradecería.

Casimiro Notevi 02-04-2013 01:35:27

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)

¿ListView?

wolfran_hack 02-04-2013 04:25:30

¿ListView? , gracias por tu colaboración :) ?

nlsgarcia 02-04-2013 06:28:41

wolfran_hack,

Cita:

Empezado por wolfran_hack
...Se necesita buscar en el ListView Nombres registrados varias veces o que ya esta registrado...eliminar "de la lista" los que no queremos ver y así obtener el resultado de la búsqueda...

Revisa este código:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
   i : Integer;
   StrList : TStringList;
begin
   StrList := TStringList.Create;
   StrList.Duplicates := dupIgnore;
   StrList.Sorted := True;
   for i := ListView1.Items.Count-1 downto 0 do
   begin
      if LowerCase(ListView1.Items[i].SubItems[0]) = LowerCase(Edit1.Text) then
         StrList.Add(ListView1.Items[i].SubItems[0])
      else
         ListView1.Items.Delete(i);
   end;
   ShowMessage(StrList.Text);
   StrList.Free;
end;
EL código anterior busca por medio de un control TEdit un valor coincidente dentro de un control TListView realizando 2 acciones:

1- Si encuentra el valor lo almacena en una variable TStringList que no permite duplicados, lo cual asegura almacenar una sola vez el valor encontrado en el caso de existir registros duplicados para su posterior procesamiento según se requiera.

2- Elimina los valores que no son coincidentes con el valor de búsqueda del TListView a efectos visuales de la búsqueda.

Espero sea útil :)

Nelson.

wolfran_hack 02-04-2013 07:02:04

gracias @nlsgarcia, esta cerca, el tema que se borra todo el contenido y no lo devuelve y el mensaje sale en blanco, pero no hay problema, me estoy fijando que puede ser.

nlsgarcia 02-04-2013 08:22:55

wolfran_hack,

Cita:

Empezado por wolfran_hack
...esta cerca, el tema que se borra todo el contenido y no lo devuelve y el mensaje sale en blanco...

Revisa esta imagen:



La imagen anterior es una muestra del funcionamiento del código del Msg #4 el cual funciono correctamente con una muestra de 1000 valores generados de la siguiente forma:
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
   i : Integer;
begin
   ListView1.Clear;
   for i := 1 to 1000 do
   begin
     with ListView1.Items.Add do
     begin
        SubItems.Add('Name-' + IntToStr(i));
        SubItems.Add('DNI-' + IntToStr(i));
     end;
   end;
end;
El programa completo para su revisión esta disponible en el link: http://terawiki.clubdelphi.com/Delph...chListView.rar

Espero sea útil :)

Nelson.


La franja horaria es GMT +2. Ahora son las 16:34:20.

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