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 umdrehthier 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