Virtuelle CListCtrl - Probleme mit der Datenverwaltung



  • Hallo,

    ich habe folgenes Problem.
    Ich habe mir eine virtuelle CListCtrl erstellt, die nicht einem Steuerelement zugeordnet ist. D.h. ich erstelle das Element zur Laufzeit.
    Ich möchte die GetDispInfo-Methode innerhalb der abgeleiteten Klasse einbauen. Dazu möchte ich eine Struktur bauen, die in allen Dimensionen dynamisch ist.
    Ich habe nun verschiedene Ansätze:

    1. Einen Vector bzw. CArray von LVITEM
    2. Einen 2D Vector mit Item, SubItem und Text
    3. Wie 2 nur als 1D Vector

    Das Problem ist, dass ich mir nicht sicher bin, wie ich das ganze vernünftig implementieren soll. Die abgeleitete Klasse von CListCtrl besitzt einen Zeiger auf die Daten, die ich beim Create-Aufruf übergebe.

    Nehmen wir mal an, die 1. Dimension sind die Items, die ich einfüge.
    Habe ich 6 Spalten(Subitems) füge ich also 6 strings ein...
    Habe ich nun 3 Items und erweitere das Ganze um eine Spalte, so müsste ich für jedes vorhandene Item ein Subitem einfügen.

    for( int i = 0; i < nItems; i++ ) {
        for( int j = 0; j < n SubItem; j++ ) {
            daten.at[i].at[j].push_back( "bla" );
        }
    }
    

    Ich find das ist eine sehr unsaubere Lösung.
    Bilde ich nun einen 1D Vector, wird es nur noch grausiger ;).

    Die Lösung mit der Struktur finde ich nicht schlecht, allerdings habe ich da auch ein manko.
    Füge ich Items ein mit den Koordinaten

    1,1 ; 1,2 ; 1,3 ; 2,1 ; 2,2 ; 2,3
    

    und anschließend die 1,4 ein dann sieht das so aus:

    1,1 ; 1,2 ; 1,3 ; 2,1 ; 2,2 ; 2,3 ; 1,4
    

    Wenn nun die Daten herangeholt werden müssen in der GetDispInfo funktioniert das so:

    for( int i = 0; i < n; i++ ) {
        if( daten[i].item == item && daten[i].subitem == subitem ) {
            //mach was^^
        }
    }
    

    Meine Frage ist nun, geht das nicht auch so anders? Ich verzweifel hier schon langsam, weil ich einfach nicht weiterkomme in mein Projekt.

    Danke!



  • Vielleicht:

    vector<string> subitem1_rows;
    vector<string> subitem2_rows;
    ...
    vector<vector<string> > columns;


Anmelden zum Antworten