Jak sortować rekordy w Delphi DBGrid według tytułu kolumny

Delphi DBGrid jest tak potężnym komponentem, że prawdopodobnie używasz go codziennie, jeśli tworzysz aplikacje obsługujące dane. Poniżej przyjrzymy się, jak dodać więcej funkcji do aplikacji bazodanowych, które użytkownicy z pewnością pokochają.

Zgodnie z koncepcjami opisanymi w Przewodnik dla początkujących po programowaniu w bazie danych Delphi, poniższe przykłady używają komponentów ADO (AdoQuery / AdoTable połączony z ADOConnection, DBGrid podłączony do AdoQuery przez DataSource) do wyświetlenia dokumentacja z tabeli bazy danych w składniku DBGrid.

Wszystkie nazwy komponentów pozostawiono tak, jak je nazwał Delphi po upuszczeniu na formularz (DBGrid1, ADOQuery1, AdoTable1 itd.).

Mysz przesuwa się nad obszarem tytułu DBGrid

Najpierw zobaczmy, jak zmienić wskaźnik myszy, gdy przesuwa się on nad obszarem tytułu DBGrid. Wszystko, co musisz zrobić, to dodać kod do zdarzenia OnMouseMove dla komponentu DBGrid.

Poniższy kod po prostu używa właściwości MouseCoord składnika DBGrid, aby „obliczyć”, gdzie znajduje się wskaźnik myszy. Jeśli znajduje się nad obszarem tytułu DGBrid, pt.y wynosi 0, co jest pierwszym wierszem DBGrid (obszar tytułu zawierający tytuły kolumn / pól).

instagram viewer

procedura TForm1.DBGrid1MouseMove
(Nadawca: TObject; Shift: TShiftState; X, Y: liczba całkowita);
var
pt: TGridcoord;
zaczynać
pt: = DBGrid1.MouseCoord (x, y);
gdyby pt.y = 0 następnie
DBGrid1.Cursor: = crHandPoint
jeszcze
DBGrid1.Cursor: = crDefault;
koniec;

Sortuj według kolumny Kliknij i zmień czcionkę tytułu kolumny

Jeśli używasz podejścia ADO do tworzenia baz danych Delphi i chcesz posortować rekordy w zbiorze danych, musisz ustawić właściwość Sortuj swojego AdoDataset (ADOQuery, AdoTable).

Właściwość Sort jest najszerszą wartością wskazującą część „ORDER BY” standardowego zapytania SQL. Oczywiście nie trzeba pisać zapytania SQL, aby móc korzystać z właściwości Sort. Po prostu ustaw właściwość Sort na nazwę pojedynczego pola lub rozdzieloną przecinkami listę pól, każde zgodne z kolejnością sortowania.

Oto przykład:

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

Zdarzenie OnTitleClick komponentu DBGrid ma parametr Column wskazujący kolumnę klikniętą przez użytkownika. Każda kolumna (obiekt typu TColumn) ma właściwość Field wskazującą pole (TField) reprezentowane przez kolumna, a pole we właściwości FieldName zawiera nazwę pola w podstawie zestaw danych.

Dlatego do sortowania zestawu danych ADO według pola / kolumny można użyć prostej linii:

z TCustomADODataSet (DBGrid1.DataSource. DataSet)
Sortuj: = kolumna. Pole. Nazwa pola; // + „ASC” lub „DESC”

Poniżej znajduje się kod modułu obsługi nawet OnTitleClick, który sortuje rekordy według kliknięcia kolumny. Kod, jak zawsze, rozszerza ideę.

Po pierwsze, chcemy w jakiś sposób zaznaczyć kolumnę, która jest obecnie używana do sortowania. Następnie, jeśli klikniemy tytuł kolumny i zestaw danych jest już posortowany według tej kolumny, chcemy zmienić kolejność sortowania z ASC (rosnąco) na DESC (malejąco) i odwrotnie. Wreszcie, kiedy sortujemy zestaw danych według innej kolumny, chcemy usunąć znak z poprzednio wybranej kolumny.

Dla uproszczenia, aby zaznaczyć kolumnę, która „sortuje” rekordy, po prostu zmienimy styl czcionki tytułu kolumny na Pogrubiony i usuniemy go, gdy zestaw danych zostanie posortowany za pomocą innej kolumny.

procedura TForm1.DBGrid1TitleClick (kolumna: TColumn);
{J J +}const PreviousColumnIndex: liczba całkowita = -1;
{J J}
beginif DBGrid1.DataSource. DataSet jest TCustomADODataSet potem TCustomADODataSet (DBGrid1.DataSource. DataSet) dobegintry
DBGrid1.Columns [PreviousColumnIndex] .title. Czcionka. Styl: =
DBGrid1.Columns [PreviousColumnIndex] .title. Czcionka. Styl - [fsBold];
z wyjątkiem;
Column.title. Czcionka. Styl: =
Column.title. Czcionka. Styl + [fsBold];
PreviousColumnIndex: = Kolumna. Indeks;
gdyby (Pos (kolumna. Pole. FieldName, Sort) = 1)
i (Pos („DESC”, Sort) = 0) następnie
Sortuj: = kolumna. Pole. FieldName + „DESC”
jeszcze
Sortuj: = kolumna. Pole. FieldName + „ASC”;
koniec;
koniec;

Powyższy kod wykorzystuje stałe wpisane aby zachować wartość poprzednio „wybranej” kolumny dla porządku sortowania.