CListCtrl ersten Header sortieren



  • Hi, ich lese Daten in eine 3-köpfige CListCtrl ein. Nun würde ich gerne beim einlesen die Daten im ersten Header sortiert haben. Wenn ich das über die Eigenschaften mache, dann gibt der mir zwar die erste Spalte richtig sortiert aus, aber macht mit den anderen Daten totaln Quatsch...ich versteh das nicht.
    Weiss einer wie ich das anstelle ?



  • Moin,

    erstmal alles ins ListCtrl laden, dann hier schauen:
    http://support.microsoft.com/kb/250614/de
    oder hier:
    http://search.internet.com/www.codeguru.com?site=codeguru|www_codeguru_com_articles&IC_QueryText=CListCtrl+sort&Search=Search

    Hatte das Problem mit dem ListCtrl sortieren vor kurzem auch( eigentlich immer noch ). Hoffe die Einträge sind bei dir nicht mehr als ca 2000. Sonst kommen Performanceprobleme auf dich zu 😮

    Viel Vergnügen 🙂

    grüssle 🙂



  • Oh man das hört sich nicht gut an :(, aber Danke für die Tips.
    Hab gestern schon ewig rumgesucht und versteh nicht warum MFC die Spaltenheader bereitstellt, man dann aber so nen AUfwand betreiben muss damit der die Liste dann auch sortiert...naja die Nachrichtenbehandlung klappt schon mal, jetzt muss er "nur" noch sortieren :x


  • Mod

    toxor schrieb:

    Oh man das hört sich nicht gut an :(, aber Danke für die Tips.
    Hab gestern schon ewig rumgesucht und versteh nicht warum MFC die Spaltenheader bereitstellt, man dann aber so nen AUfwand betreiben muss damit der die Liste dann auch sortiert...naja die Nachrichtenbehandlung klappt schon mal, jetzt muss er "nur" noch sortieren :x

    Ich verstehe nicht was sich nicht gut anhört. Das sortieren solch eines List Controls ist doch elementar simpel.
    Es gibt ja auch LVM_SORTITEMSEX
    http://msdn2.microsoft.com/en-us/library/bb761228.aspx

    Zudem: Wenn Du nach der ersten Spalte grundsätzlich sortieren willst, kannst Du den Sort Stil doch setzen.



  • Naja an meinen Daten die ich in der ersten Spalte einsetze, hängen halt noch andere Daten dran, die nicht mehr in der richtigen Reihe angezeigt werden, wenn ich das durch den Sort Stil machen lasse.
    Wenn ich den Sort Stil auf FALSE lasse, dann zeigt er mir die richtigen Daten an. Die Daten lese ich aus einer Text-Datei.

    Also ohne Sort Stil :
    
     1       2
    Meier    OK
    Bastian  OK
    Huber    
    Pan      
    
    Mit Sort Stil :
      1       2
    Bastian 
    Huber
    Meier
    Pan       OK
    

    Wie man sieht setzt er die "OK's" nicht mehr an der richtigen Stelle.

    Und was sich nicht gut anhört, ist der sein Spruch gewesen , von wegen wenns mehr als 2000 Elemente werden gibts Performance Probleme, weil mein Listenfeld bestimmt irgendwann soviele Einträge hat.

    Danke für den Tip mit LVM_SORTITEMSEX, werd das mal näher unter die Lupe nehmen

    Edit : Wow , danke mit LVM_SORTITEMSEX scheints tatsächlich easy zu gehen, big thx 👍



  • das das OK dann nicht mehr an der richtigen stelle ist, ist nur ein design problem

    das passiert wenn du items so setzt:

    int iPos = bla.GetItemCount();
    bla.InsertItem(iPos, _T("Meier"));
    bla.SetItemtext(iPos, 1, _T("OK"));

    da ist es bei InsertItem gleich sortiert und das SetItemtext greift auf das falsche item zu
    dort abhilfe zu schaffen ist direkt was man schreiben will als TVITEM zu definieren und dann dieses item einmalig hinzuzufuegen

    ich selber machs so das ich das sortieren per code mit bla.SortItems erledige, da meine daten eigentlich eh immer als struktur vorliegen, ist das kein problem diese mit SetItemData zuzuweisen und dann zu sortieren
    wenn nicht hilft auch eine temporaere dummy struktur die halt nur beim sortieren lebt



  • Mr Evil schrieb:

    dort abhilfe zu schaffen ist direkt was man schreiben will als TVITEM zu definieren und dann dieses item einmalig hinzuzufuegen

    Oder einfach den Rückgabewert von InsertItem zu benutzen 😉


Anmelden zum Antworten