Computerwissenschaften

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 datensensitive Anwendungen entwickeln. Im Folgenden erfahren Sie, wie Sie Ihren Datenbankanwendungen weitere Funktionen hinzufügen können, die Ihre Benutzer mit Sicherheit lieben werden.

In Anlehnung an die im Anfängerhandbuch zur Delphi-Datenbankprogrammierung beschriebenen Konzepte werden in den folgenden Beispielen ADO-Komponenten (AdoQuery / AdoTable, verbunden mit ADOConnection, DBGrid verbunden mit AdoQuery über DataSource) verwendet, um die Datensätze aus einer Datenbanktabelle in einer DBGrid-Komponente anzuzeigen.

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.

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).

Prozedur TForm1.DBGrid1MouseMove 
(Absender: TObject; Shift: TShiftState; X, Y: Integer); 
var
 pt: TGridcoord; 
begin
 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 Schriftart des Spaltentitels

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 durch die Column dargestellte Field (TField) angibt, und das Field in seiner FieldName-Eigenschaft enthält den Namen des Felds im zugrunde liegenden Dataset.

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

mit TCustomADODataSet (DBGrid1.DataSource.DataSet) sortieren 
:=Column.Field.FieldName; // + '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, in der die Datensätze „sortiert“ werden, einfach den Schriftstil des Spaltentitels in „Fett“ und entfernen ihn, wenn das Dataset nach einer anderen Spalte sortiert wird.

procedure TForm1.DBGrid1TitleClick (Column: TColumn); 
{$ J +} const PreviousColumnIndex: integer=-1; 
{$ J- } 
beginif DBGrid1.DataSource.DataSet ist TCustomADODataSet thenwith TCustomADODataSet (DBGrid1.DataSource.DataSet) dobegintry
 DBGrid1.Columns [PreviousColumnIndex] .title.Font.Style:=
DBGrid1.Columns [PreviousColumnIndex] .title.Font.Style - [fsBold]; 
 ausgenommen ; 
Column.title.Font.Style:=
Column.title.Font.Style + [fsBold]; 
PreviousColumnIndex:=Column.Index; 
 if (Pos (Column.Field.FieldName, Sort)=1) 
 und (Pos ('DESC', Sort)=0) dann
 Sort:=Column.Field.FieldName + 'DESC' 
 else
 Sort:=Column.Field.FieldName + 'ASC'; 
 Ende ; 
Ende ;

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

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.