Info zum Sortieren mit m_pSet->m_strSort



  • ich habe mir eine DB Sicht mit einem Listenelement geschrieben
    Ich kann dort Sortieren nach Spalten beim drücken auf die Überschriften.
    Er sortiert aber nur abwärts.
    Wie kann ich erreichen das er mir bei erneuten Drüchen die
    Sortierauswahl umdreht

    hier mein Code der übrigens tadellos funktioniert

    void Sicht_KundendatenDlg::OnColumnclickSicht1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
        NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
        NMHEADER *pHdr = (NMHEADER*)pNMHDR;
    
    if ( pHdr->iButton == 0)
    {
        Sortierauswahl = "ErstellugsZeit";
    }
    if ( pHdr->iButton == 1)
    {
        Sortierauswahl = "KundenID";
    }
    if ( pHdr->iButton == 2)
    {
        Sortierauswahl = "Vorname";
    }
    if ( pHdr->iButton == 3)
    {
        Sortierauswahl = "Name";
    }
    if ( pHdr->iButton == 5)
    {
        Sortierauswahl = "PLZ";
    }
    if ( pHdr->iButton == 6)
    {
        Sortierauswahl = "Ort";
    }
    if ( pHdr->iButton == 9)
    {
        Sortierauswahl = "Kontoverbindung";
    }
    Record_Kunden1 *m_pSet;
    m_pSet = new Record_Kunden1(NULL);
    
    m_pSet->m_strSort = Sortierauswahl ;
    
    int Spaltenanzahl = m_pSet->m_nFields;
    
    if (Suchmodus == 1)
    {
    
        m_pSet->m_strFilter = "[" + suchen_Spalte + "]='" + suchen_Begriff + "'OR["+ m_Spalte2 + "]='" + m_Begriff2 + "'";
    
    }
    
    m_Sicht1.DeleteAllItems();
    
        abc = 0;
    
        for (m_pSet->Open();abc != m_pSet->GetRecordCount();m_pSet->MoveNext())
    
        {
    // geht nätürlich weiter ist aber für mein Problem bedeutungslos da
    // hier nur die Ausgabe steht
    

    😕 Danke Vossy 😕



  • [edit]
    Sorry. Ich hab übersehen, dass du eine neue Instanz von m_pSet anlegst. Um unten stehendes verwenden zu können, musst du auf irgendeine Art den letzten angegebenen Sort merken.
    Ich würde dir vorschlagen, dein m_pSet als Member-Variable der Klasse Sicht_KundendatenDlg aufzunehmen und diese im Konstruktor belegen zu lassen. Im Destruktor dann das delete nicht vergessen. 😉
    [/edit]

    Hallo

    Für umgekehrte Sortierung musst du ein "desc" anhängen. Also z.B.

    Sortierauswahl = "Ort desc";
    

    statt

    Sortierauswahl = "Ort";
    

    Wenn ich dich richtig verstanden habe, soll beim ersten Klick aufsteigend sortiert werden und, falls auf die selbe Spalte ein zweites Mal geklickt wird, dann absteigend.
    Am einfachsten ist es wohl auf die Art:

    if ( pHdr->iButton == 0)
    {
        if (m_pSet->m_strSort.Find("ErstellugsZeit") != -1 && m_pSet->m_strSort.Find("desc") == -1){
            Sortierauswahl = "ErstellugsZeit desc";
        } else {
            Sortierauswahl = "ErstellugsZeit";
        }
    }
    

    [ Dieser Beitrag wurde am 08.08.2002 um 13:10 Uhr von Kauz01 editiert. ]



  • Hallo habe es so gelöst weil einfacher und logisch

    void Sicht_KundendatenDlg::OnColumnclickSicht1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
        NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
        NMHEADER *pHdr = (NMHEADER*)pNMHDR;
    
    if ( pHdr->iButton == 0)
    {
    
        if (zustand1 != 1)
        {
        Sortierauswahl = "ErstellugsZeit";
        zustand1 = 1;
        }
        else
        {
        Sortierauswahl = "ErstellugsZeit desc";
        zustand1 = 0;
        }
    
    }
    if ( pHdr->iButton == 1)
    {
        if (zustand2 != 1)
        {
        Sortierauswahl = "KundenID";
        zustand2 = 1;
        }
        else
        {
        Sortierauswahl = "KundenID desc";
        zustand2 = 0;
        }
    }
    

    Hatte nur das << desc >> benötigt

    geht jetzt alles danke dir

    Kauz01

    🙂 Vossy 🙂


Anmelden zum Antworten