Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Listview von doppelten Einträgen befreien.

  Alt 26. Okt 2005, 06:46
Hallo ihr beiden, zwei Dinge hätte ich noch.

Zum einen macht es mich stutzig, dass ein Löschen bei gleicher Caption und differierenden SubItems nicht verlustfrei ist - eventuell vorhandene SubItems sollten doch gerettet werden, oder habe ich das falsch verstanden?

Und zum anderen dient eine ListView der Visualisierung und ist kein Datenspeicher. Hier eine alternative Vorgehensweise beim Einsatz einer virtuellen ListView. Nehmen wir an, die Daten wären in einer StringList gespeichert und die Zeilen hätten folgenden Aufbau:
Code:
Caption1=SubItem1,SubItem2,SubItem3
Dann kann man sie folgendermaßen löschen:
Delphi-Quellcode:
procedure LootSubItems(s: TStrings; iFrom, iTo: integer);
var
  i: integer;
  sFrom, sTo: TStrings;
begin
  sFrom := TStringList.Create;
  sFrom.CommaText := s.Values[s.Names[iFrom]];
  sTo := TStringList.Create;
  sTo.CommaText := s.Values[s.Names[iTo]];
  for i := 0 to Pred(sFrom.Count) do
    if sTo.Count <= i then
      sTo.Add(sFrom[i])
    else if sFrom[i] <> 'then
      sTo[i] := sFrom[i];
  s.Values[s.Names[iTo]] := sTo.CommaText;
  sFrom.Free;
  sTo.Free;
end;

procedure KillDuplicates(s: TStrings);
var
  iLow, iHigh: integer;
begin
  for iLow := 0 to s.Count - 2 do
    for iHigh := Pred(s.Count) downto Succ(iLow) do
      if s.Names[iLow] = s.Names[iHigh] then
      begin
        LootSubItems(s, iHigh, iLow)
        s.Delete(iHigh);
      end;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat