Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Leere ListView Einträge löschen und Spalte nach oben rücken? (https://www.delphipraxis.net/182210-leere-listview-eintraege-loeschen-und-spalte-nach-oben-ruecken.html)

devidespe 9. Okt 2014 14:07

Delphi-Version: XE

Leere ListView Einträge löschen und Spalte nach oben rücken?
 
Hallo,

ich habe eine Listview mit diversen Zeilen und 3 Spalten, wovon auch leere Einträge drin sind, die ich löschen möchte. Die leeren Einträge habe ich nachfoglend mal mit ( leer ) gekennzeichnet.

Delphi-Quellcode:
        Spalte 1          Spalte 2         Spalte 3
Zeile 1    Textfeld            ( leer )           Textfeld
Zeile 2   ( leer )            Textfeld            Textfeld
Zeile 3    Textfeld             Textfeld           ( leer )
Wie kann ich es bewerkstelligen, dass die leeren Einträge, hier mit ( leer ) gekennzeichnet, gelöscht werden und die entsprechende Spalte nach oben rückt?
Wünschenswert wäre eine zusammengerückte Listview in folgendem Format:

Delphi-Quellcode:
        Spalte 1          Spalte 2         Spalte 3
Zeile 1   Textfeld           Textfeld           Textfeld
Zeile 2   Textfeld            Textfeld           Textfeld
Zeile 3   ( leer )             ( leer )           ( leer )
Dann bräuchte ich noch eine Abfrage, wie ich komplett leere Zeilen, wie in diesem Fall die letzte, löschen kann.

Kann mir da jemand helfen? Danke im Voraus.

Dennis07 9. Okt 2014 18:49

AW: Leere ListView Einträge löschen und Spalte nach oben rücken?
 
Du kannst im TListview keine Nebenspalten "löschen", höchstens leeren.
Das liegt daran, dass nur der eintrag der jeweils ersten Spalte "real" ist. Die anderen sind nur items in der SubItems-Stringlist.

Das mit dem Nachrücken lässt sich aber recht einfach "simulieren", in dem du eine FOR-Schleife einfügst.
Ich würde das ganze so machen:

Das hier tut, was du willst.
Bitte nicht nur kopieren, auch verstehen... ;)

Delphi-Quellcode:
procedure Einruecken;
var
  Index_Column: Integer;
  Index_Line: Integer;
begin
  for Index_Column := 0 to ListView.Columns.Count - 2 do
  begin
    Index_Line := 0;
    while Index_Line < ListView.Items.Count - 1 do
    begin
      if Length(ListView.Items.Item[Index_Line].SubItems.Strings[Index_Column]) = 0 then
      begin
        ListView.Items.Item[Index_Line].SubItems.Strings[Index_Column] := ListView.Items.Item[Index_Line + 1].SubItems.Strings[Index_Column];
        ListView.Items.Item[Index_Line + 1].SubItems.Strings[Index_Column] := '';
      end else
      begin
        Inc(Index_Line);
      end;
    end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz