Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako izbrisati duplikate iz ListView-a

[es] :: Pascal / Delphi / Kylix :: Kako izbrisati duplikate iz ListView-a

[ Pregleda: 2747 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

gl-xl

Član broj: 547
Poruke: 9
195.252.103.*



Profil

icon Kako izbrisati duplikate iz ListView-a11.05.2003. u 20:29 - pre 255 meseci
Jos sam pocetnik u delphi-ju, pa mi je nedavno iskrsao problem koji nikako da resim (ustvari dva problema). Prvi je sledeci: Kako da izbrisem podatke iz Tlistview-a koji se ponavljaju tj. kako da izbrisem polja koja imaju iste podatke (duplikate).

Drugo pitanje se odnosi na pretrazivanje. Ono sto mi je potrebno je sledece, kako da napravim da kad korisnik unese neku rec u Tedit polje, i pritiskom na dugme da pretrazi sve podatke koji se nalaze u Listviewu, a zatim da u tom istom listview-u prikaze samo rezultate odnosno polja koja sadrze tu rec.

Nadam se da sam bio dovoljno jasan...
" Srbija ima heroje koji su postali ubice... "
 
Odgovor na temu

Ilija Studen
Novi Sad

Član broj: 3864
Poruke: 859
195.252.123.*

Sajt: www.activecollab.com


+1 Profil

icon Re: Kako izbrisati duplikate iz ListView-a12.05.2003. u 12:00 - pre 255 meseci
Moras malo bolje poznavati TListView da bi to odradio.

Prvo: ako imas samo jednu kolonu onda mozes ovako odraditi pretrazivanje:

Code:
function TraziUListi(TraziOvo: string): TListItem;
var
  i: integer;
begin
  Result := nil;
  for i := 0 to ListView.Items.Count - 1 do
    if ListView.Items.Item[i].Caption = TraziOvo then
      begin
        Result := ListView.Items.Item[i];
        Exit;
      end;
end;


a obrada dogadja ti izgleda nekako ovako:

Code:
procedure ButtonClick(Sender: TObject);
var
  TmpItem: TListItem;
begin
  TmpItem := TraziUListi(Edit.Text);
  if  TmpItem = nil then
    ShowMessage('Nema pogodaka!')
  else
    ShowMessage('Pogodak!');
end;


Za result sam stavio TListItem pa sa njom mozes da radis sta god hoces!

Sto se duplikata tice prilagodi mozes ovako:

Code:
procedure ButtonClick(Sender: TObject);
var
  i: integer;
  List: TStringList;
begin
  List := TStringList.Create;
  try
    // Ovaj deo skuplja indexe duplikata
    for i := 0 to ListView.Items.Count - 1 do
      if ListView.Items.Item[i].Caption = Edit.Text then
        List.Add(IntToStr(i));
    // Ovaj deo brise duplikate
    for i := List.Items.Count to 0 do
      ListView.Items.Delete(StrToInt(List.Strings[i]));
  finally
    List.Free;
  end;
end;


Pazi! Ovaj kod sam kucao iz glave i cisto je divljacenje (spor ako je lista velika). Sve se to moze resiti sa rekurzijama (radi mnogo brze), ali trenutno nemam ni vremena ni zivaca da pravim to. Takodje, radice samo za prvu kolonu liste. Ako hoces da proveravas i druge kolone obrati paznju na Items.Subitems listu gde ListView inace cuva njihove vrednosti.

Pozdrav!
http://www.activecollab.com - Alat za upravljanje projektima
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Kako izbrisati duplikate iz ListView-a

[ Pregleda: 2747 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.