ListView zeilen tauschen
-
hi,
all gibt es irgendwie eine Möglichkeit zwei Zeilen eines ListViews im Report-Style unkompliziert zu tauschen, mit Subitems natürlich! Habe in der Hilfe keine Funktion gefunden.
Hoff mir kann jmd helfen.
Grüßle
-
Der Style ist dabei völlig irrelevant, du musst einfach die entsprechenden Item-Positionen vertauschen. Also das erste löschen (ggf. zwischenspeichern) und dann "eins tiefer" wieder einfügen.
-
Oder gleich TListBox::Items::Exchange() benutzen.
-
ListBox != ListView
-
hi,
nicht gleich lachen. ich arbeite mit dem c++ builder noch nicht lange. aber geht das nicht, wenn ich ein Item ein anderes direkt zuweise und zwar so:
ListView->Items->Item[j] = ListView->Items->Item[i]; //oder so: TListItem *pItem = ListView->Items->Item[j]; //oder so ListView->Items->Item[i] = pItem;
weil irgendwie klappt die zuweisung nicht!
-
Weil irgendwie klappt die Zuweisung nicht
Super. Kannst du noch ein wenig ungenauer werden? Das war schon fast Desinformation genug. Tausche die zwei ersten Zeilen deines Codes. Dann klappt's.
-
ich bins nochmal klappt irgendwie immernoch nicht! steh wahrscheinlich total auf dem schlau!
ich geb euch mal den code. ich nehm das Item das zuletzt hinzugefügt wurde und das item davor und nehm aus der Caption der Item den substring nachdem sortiert werden soll. vergleiche die beiden und dann tue ich die zwei zeilen tauschen wenn nötig so lange bis das zuletzt hinzugefügte item an der richtigen stelle ist!
hier der code:int i = ListView->Items->Count-1; for(int j = i-1; j >= 0; j--) { AnsiString aTemp = ListView->Items->Item[j]->Caption.SubString(13,4); AnsiString aYear = ListView->Items->Item[i]->Caption.SubString(13,4); if(aTemp.ToInt() > aYear.ToInt()) { TListItem *pItem = ListView->Items->Item[j]; ListView->Items->Item[j] = ListView->Items->Item[i]; ListView->Items->Item[i] = pItem; i = j; } else break; }
der code läuft durch aber dann sind alle items im ListView gleich und zwar genauso wie das item das zuletzt hinzugefügt wurde.
ich steh glaub ich voll auf dem schlauch. hoff mir kann jemand herunterhelfen!!!
-
Warum benutzt du nicht einfach TListView::AlphaSort bzw. CustomSort?
-
hi alex,
ist klar, dass das nicht funktioniert.
Du über gibst das Item[j] einem Zeiger. Damit zeigt dieser auf Item[j] und dann machst du aus Item[j] das Item [i] und zum schluss übergibst du mit hilfe des Zeigers den wert von Item[j] also wieder Item[i] an Item[i]. Deshalb hast du in deinem ListView danach nur Item[i] stehen.