Danke für die schnelle Antwort. Mein Kunde hätte gerne, so wie er das von
Access kennt, die Sortierung über den Kopf des Grids gemacht, ohne die Datensätze jedesmal mit select neu zu laden. Mit dem
Jedi Ultimgrid soll es jedenfalls einfach sein (so habe ich mal in einem Beitrag gelesen). Leider finde ich diesen Beitrag nicht mehr und so detailiert beschrieben war er auch nicht. Klar, Dein Weg ist auch eine Möglichkeit. wenn ich mit dem Ultimgrid nicht weiter komme, werde ich Dein Weg ausprobieren.
1. Dein Kunde sieht beim Einsatz deiner Anwendung nicht, was im Hintergrund läuft. Für den Anwender ist das Programm eine Blackbox.
2. Du kannst beim TjvDBGrid wie auch beim TDBGrid das Ereignis OnTitleKlick verwenden, um die Sortierung vom Anwender anstoßen zu lassen. Schau dir einmal meinen
Passwort Tresor (Freeware) an, dort wird die Tabelle genau so sortiert, wie du es beschreibst.
3. Auch ein DBGrid, das angeblich die Sortierung übernimmt (habe UltimGrid noch nie verwendet), wird intern nicht anders arbeiten als entweder ein neues Select abzusetzen oder eben IndexFieldNames zu setzen.
4. Beim Verwenden von IndexFieldNames wird die Datenmenge nicht neu geladen, sondern neu sortiert.
5. Datensensitive Komponenten dienen ausschließlich der Darstellung und er Weitergabe von Benutzeraktionen. Alles andere machst du besser direkt mit den entsprechenden Queries, Datasets oder Tables.
Das hier ist ganze Sortier-Methode:
Delphi-Quellcode:
Procedure TDatBankEdit.Zugang_Sort(Spalte : Integer; Feld :
String);
Const
SortText = '
Zugangsdaten sortiert nach ';
Var
SortSQL,
SortOrd :
String;
begin
IF Allg.BTab.PassSortOrder
THEN
BEGIN
SortOrd := '
aufwärts';
SortSQL := '
ASC';
END ELSE
BEGIN
SortOrd := '
abwärts';
SortSQL := '
DESC';
END;
DatMod.ClientSet_Speichern;
DatMod.Qset_Zugang.IndexFieldNames := Feld + SortSQL;
DatMod.ClientSet_Laden;
CASE Spalte
OF
0 : Allg.BTab.PassSortText := SortText + '
Objekt' + SortOrd;
1 : Allg.BTab.PassSortText := SortText + '
Zugangsart' + SortOrd;
2 : Allg.BTab.PassSortText := SortText + '
URL' + SortOrd;
3 : Allg.BTab.PassSortText := SortText + '
Benutzer' + SortOrd;
4 : Allg.BTab.PassSortText := SortText + '
Passwort' + SortOrd;
END;
Allg.BTab.PassSortIdx := Spalte;
end;
Die Sortmarker werden hier gesetzt:
Delphi-Quellcode:
Procedure TFormMain.SortmarkerSetzen;
begin
DBGrid_Zugang.SortedField := DBGrid_Zugang.Columns[Allg.BTab.PassSortIdx].FieldName;
IF Allg.BTab.PassSortOrder THEN
DBGrid_Zugang.SortMarker := smUp ELSE
DBGrid_Zugang.SortMarker := smDown;
end;
Aufgerufen wird das dann so:
Delphi-Quellcode:
Procedure TFormMain.Sortieren(Spalte : Integer);
begin
IF Spalte = Allg.BTab.PassSortIdx THEN
Allg.BTab.PassSortOrder := NOT Allg.BTab.PassSortOrder ELSE
Allg.BTab.PassSortOrder := True;
DBE.Zugang_Sort(Spalte,GetSortedField(Spalte));
SortmarkerSetzen;
Allg.StatBar_Main_Aktuell;
end;
Und hier das Ereignishandling vom Titelklick:
Delphi-Quellcode:
Procedure TFormMain.DBGrid_ZugangTitleClick(Column: TColumn);
Var
Spalte : Integer;
begin
DBGrid_Zugang.Visible := False;
Spalte := Column.Index;
Sortieren(Spalte);
DBGrid_Zugang.Visible := True;
end;