Как сортировать набор данных по щелчку мыши? Очень просто:
У нас имеется TQuery, TDataSource и TDBGrid на форме, связанные вместе.
QuerySQL - глобальная строка, которая содержит инструкцию SQL.
begin
QuerySQL := 'SELECT * FROM Customer.DB';
Query1.SQL.Add(QuerySQL);
Query1.Open;
end;
В событии OnTitleClick DBGrid мы только добавляем ORDER BY к SQL и обновляем запрос.
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
witzh Query1 do
begin
DisableControls;
Close;
SQL.Clear;
SQL.Add(QuerySQL);
SQL.Add('ORDER BY ' + Column.FieldName);
Open;
// Восстановить настройки заголовка
DBGrid1.Columns.RestoreDefaults;
Column.Title.Font.Color := clBlue;
EnableControls;
end;
end;
Рисуем стрелки на заголовке:
procedure PaintArrowUp(Canvas: TCanvas; var Rect: TRect);
var
SaveCol : TColor;
begin
with Canvas do begin
SaveCol:=Pen.Color;
Pen.Color:=clGray;
MoveTo(Rect.Right-10, Rect.Top+11);
LineTo(Rect.Right-7, Rect.Top+5);
Pen.Color:=clWhite;
MoveTo(Rect.Right-6, Rect.Top+5);
LineTo(Rect.Right-3, Rect.Top+11);
LineTo(Rect.Right-10, Rect.Top+11);
Pen.Color:=SaveCol;
end;
end;
procedure PaintArrowDown(Canvas: TCanvas; var Rect: TRect);
var
APolyLine: Array[0..2] of TPoint;
SaveCol : TColor;
begin
with Canvas do begin
SaveCol:=Pen.Color;
Pen.Color:=clGray;
APolyLine[0]:=Point(Rect.Right-3, Rect.Top+5);
APolyLine[1]:=Point(Rect.Right-10, Rect.Top+5);
APolyLine[2]:=Point(Rect.Right-7, Rect.Top+11);
PolyLine(APolyLine);
Pen.Color:=clWhite;
MoveTo(Rect.Right-6, Rect.Top+11);
LineTo(Rect.Right-3, Rect.Top+5);
Pen.Color:=SaveCol;
end;
end;
|