So sortieren Sie Datensätze in Delphi DBGrid nach Spaltentitel

Delphi DBGrid ist eine so leistungsstarke Komponente, dass Sie sie wahrscheinlich jeden Tag verwenden, wenn Sie datenbewusste Anwendungen entwickeln. Im Folgenden erfahren Sie, wie Sie Ihren Datenbankanwendungen weitere Funktionen hinzufügen können, die Ihre Benutzer mit Sicherheit lieben werden.

Befolgen Sie die in der Anfängerleitfaden zur Delphi-DatenbankprogrammierungIn den folgenden Beispielen werden ADO-Komponenten (AdoQuery / AdoTable, verbunden mit ADOConnection, DBGrid, verbunden mit AdoQuery über DataSource) zum Anzeigen der Aufzeichnungen aus einer Datenbanktabelle in einer DBGrid-Komponente.

Alle Komponentennamen wurden so belassen, wie Delphi sie benannt hat, als sie im Formular abgelegt wurden (DBGrid1, ADOQuery1, AdoTable1 usw.).

Die Maus bewegt sich über den DBGrid-Titelbereich

Lassen Sie uns zunächst sehen, wie Sie den Mauszeiger ändern, während er sich über den DBGrid-Titelbereich bewegt. Sie müssen lediglich den Code zum OnMouseMove-Ereignis für die DBGrid-Komponente hinzufügen.

instagram viewer

Der folgende Code verwendet einfach die MouseCoord-Eigenschaft der DBGrid-Komponente, um zu "berechnen", wo sich der Mauszeiger befindet. Wenn es sich über dem DGBrid-Titelbereich befindet, ist pt.y gleich 0, was die erste Zeile im DBGrid ist (der Titelbereich, in dem Spalten- / Feldtitel angezeigt werden).

Verfahren TForm1.DBGrid1MouseMove
(Absender: TObject; Shift: TShiftState; X, Y: Integer);
var
pt: TGridcoord;
Start
pt: = DBGrid1.MouseCoord (x, y);
wenn pt.y = 0 dann
DBGrid1.Cursor: = crHandPoint
sonst
DBGrid1.Cursor: = crDefault;
Ende;

Nach Spalte sortieren Klicken Sie auf und ändern Sie die Spaltentitelschrift

Wenn Sie den ADO-Ansatz für die Delphi-Datenbankentwicklung verwenden und die Datensätze im Dataset sortieren möchten, müssen Sie die Sort-Eigenschaft Ihres AdoDataset (ADOQuery, AdoTable) festlegen.

Die Sort-Eigenschaft ist der breiteste Wert, der den Teil "ORDER BY" der Standard-SQL-Abfrage angibt. Natürlich müssen Sie die SQL-Abfrage nicht schreiben, um die Sort-Eigenschaft verwenden zu können. Setzen Sie die Sort-Eigenschaft einfach auf den Namen eines einzelnen Felds oder auf eine durch Kommas getrennte Liste von Feldern, die jeweils der Sortierreihenfolge folgen.

Hier ist ein Beispiel:

ADOTable1.Sort: = 'Jahr DESC, ArticleDate ASC'

Das OnTitleClick-Ereignis der DBGrid-Komponente verfügt über einen Column-Parameter, der die Spalte angibt, auf die der Benutzer geklickt hat. Jede Spalte (Objekt vom Typ TColumn) verfügt über eine Field-Eigenschaft, die das Feld (TField) angibt, das durch dargestellt wird Die Spalte und das Feld in der Eigenschaft FieldName enthalten den Namen des Felds im Basiswert Datensatz.

Daher kann zum Sortieren eines ADO-Datasets nach Feld / Spalte eine einfache Zeile verwendet werden:

mit TCustomADODataSet (DBGrid1.DataSource. DataSet) tun
Sortieren: = Spalte. Feld. Feldname; // + 'ASC' oder 'DESC'

Unten finden Sie den Code für den OnTitleClick-Even-Handler, der die Datensätze nach Spaltenklick sortiert. Der Code erweitert wie immer die Idee.

Zunächst möchten wir auf irgendeine Weise die Spalte markieren, die derzeit für die Sortierreihenfolge verwendet wird. Wenn wir als Nächstes auf einen Spaltentitel klicken und das Dataset bereits nach dieser Spalte sortiert ist, möchten wir die Sortierreihenfolge von ASC (aufsteigend) in DESC (absteigend) und umgekehrt ändern. Wenn wir den Datensatz nach einer anderen Spalte sortieren, möchten wir schließlich die Markierung aus der zuvor ausgewählten Spalte entfernen.

Der Einfachheit halber ändern wir zum Markieren der Spalte, die die Datensätze "sortiert", einfach den Schriftstil des Spaltentitels in "Fett" und entfernen ihn, wenn das Dataset mithilfe einer anderen Spalte sortiert wird.

Verfahren TForm1.DBGrid1TitleClick (Spalte: TColumn);
{$ J +}const PreviousColumnIndex: integer = -1;
{$ J-}
beginif DBGrid1.DataSource. DataSet ist TCustomADODataSet dannmit TCustomADODataSet (DBGrid1.DataSource. DataSet) Dobegintry
DBGrid1.Columns [PreviousColumnIndex] .title. Schriftart. Stil: =
DBGrid1.Columns [PreviousColumnIndex] .title. Schriftart. Stil - [fsBold];
ausgenommen;
Column.title. Schriftart. Stil: =
Column.title. Schriftart. Stil + [fsBold];
PreviousColumnIndex: = Column. Index;
wenn (Pos (Spalte. Feld. Feldname, Sortieren) = 1)
und (Pos ('DESC', Sortieren) = 0) dann
Sortieren: = Spalte. Feld. Feldname + 'DESC'
sonst
Sortieren: = Spalte. Feld. Feldname + 'ASC';
Ende;
Ende;

Der obige Code verwendet typisierte Konstanten um den Wert der zuvor "ausgewählten" Spalte für die Sortierreihenfolge beizubehalten.