![]() |
TListView Spalten vertauschen
Hallo,
wie ist es bei einer TListView(vsReport), bestehend aus 2 Spalten mit mehreren Einträgen möglich die Reihenfolge der Spalten zu verändern (vertauschen)? danke. |
Re: TListView Spalten vertauschen
Ich kenne da jetzt kein vordefinierte Routine dafür, aber mit etwas Handarbeit sollte das zu machen sein. Enthalten die Items/SubItems denn auch Objekte oder handelt es sich um eine reine Anzeige?
|
Re: TListView Spalten vertauschen
Sind keine Objekte enthalten, nur Strings. Ich habe daher nur die Beschriftung geändert.
|
Re: TListView Spalten vertauschen
Auch wenn es nicht sonderlich elegant ist: Du könntest in einer Schleife durch die Items iterieren, Dir die Caption merken und mit SubItems[0] einen Dreieckstausch durchführen. BeginUpdate und EndUpdate dabei genauso wenig vergessen wie die Columns, die müssten ja auch getauscht werden. Andererseits gibt es da bestimmt eine Methode, die mir nur gerade nicht einfällt :gruebel:
|
Re: TListView Spalten vertauschen
Du könntest auch den Style
![]() |
Re: TListView Spalten vertauschen
Columns.Items[x].Index den entsprechenden Index zuordnen
|
Re: TListView Spalten vertauschen
Hallo,
es gibt eine Methode :zwinker:
Delphi-Quellcode:
for z := a to b do
ListView.Items[z].SubItems.Exchange(Spalte1,Spalte2); //eventuell noch ListView.UpdateItems(a,b); |
Re: TListView Spalten vertauschen
Aber tauscht das nicht nur die SubItems aus? Bei 2 Spalten müsste man doch aber Item und 1. SubItem austauschen, oder spinne ich gerade?
|
Re: TListView Spalten vertauschen
Hallo,
nee, Du spinnst nicht :( Zitat:
|
Re: TListView Spalten vertauschen
Meine Gedanken von oben einmal in Code gefasst:
Delphi-Quellcode:
procedure TFormWuppdi.ButtonTauschClick(Sender: TObject);
var i: integer; tmp: string; begin ListView1.Items.BeginUpdate; try tmp := ListView1.Columns[0].Caption; ListView1.Columns[0].Caption := ListView1.Columns[1].Caption; ListView1.Columns[1].Caption := tmp; for i := 0 to ListView1.Items.Count - 1 do begin tmp := ListView1.Items[i].Caption; ListView1.Items[i].Caption := ListView1.Items[i].SubItems[0]; ListView1.Items[i].SubItems[0] := tmp; end; finally ListView1.Items.EndUpdate; end; end; |
Re: TListView Spalten vertauschen
ich sag's nochmal:
Einfach nur die ANZEIGE (Reihenfolge/Sichtbarkeit) der Überschrift ändern ... dann müssen nicht die Spaltendaten selber geändert werden. Was wo und wie in welcher Spalte ssichtbar ist, legt der Header fest. |
Re: TListView Spalten vertauschen
Das hat bei mir lediglich die Überschriften geändert, deshalb ja das Codemonster.
|
Re: TListView Spalten vertauschen
Laß mal die Tabelle neu zeichnen.
Das ändern dieses Index macht genau das Selbe, wenn man via Drag&Drop die Header verschiebt. Es wird dann nur die Ansicht verändert, aber die Daten bleiben innerhalb gleich. PS: wenn man in den Daten rumschiebt, dann müßte man beim Befüllen der Tabelle (z.B. neue Zeilen einfügen) dann auch die neuen Daten in einer anderen Reihenfolge reinschieben ... sehr umständlich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz