AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Leere ListView Einträge löschen und Spalte nach oben rücken?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Offene Frage von "Dennis07"
Ein Thema von devidespe · begonnen am 9. Okt 2014 · letzter Beitrag vom 9. Okt 2014
Antwort Antwort
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
434 Beiträge
 
Delphi 10.4 Sydney
 
#1

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

  Alt 9. Okt 2014, 14:07
Delphi-Version: XE
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.
Devid
57 65 72 20 6C 65 73 65 6E 20 6B 61 6E 6E 2C 20 69 73 74 20 6B 6C 61 72 20 69 6D 20 56 6F 72 74 65 69 6C 21
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
482 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 9. Okt 2014, 18:49
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;
Dennis

Geändert von Dennis07 ( 9. Okt 2014 um 18:52 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:31 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