procedure TfmForm1.DBGrid1TitleClick(Column: TColumn);
var
i: Integer;
begin
// apply grid formatting changes here e.g. title styling
with DBGrid1 do
for i := 0 to Columns.Count - 1 do
Columns[i].Title.Font.Style := Columns[i].Title.Font.Style - [fsBold];
Column.Title.Font.Style := Column.Title.Font.Style + [fsBold];
with nxQuery1 do // the DBGrid's query component (a [NexusDB] TnxQuery)
begin
DisableControls;
if Active then Close;
for i := 0 to SQL.Count - 1 do
if (Pos('order by', LowerCase(SQL[i])) > 0) then
//NOTE: ' desc' The [space] is important
if (Pos(' desc',LowerCase(SQL[i])) > 0) then
SQL[i] := newOrderBySQL
else
SQL[i] := newOrderBySQL +' desc';
// re-add params here if necessary
if not Active then Open;
EnableControls;
end;
end;
procedure TForm1.DBGrid3TitleClick(Column: TColumn);
var
cFieldName:string;
begin
cFieldName:= DBGrid3.SelectedField.FieldName;
AdoDataset1.Sort:=cFieldName;
end;
8条答案
按热度按时间zsohkypk1#
在TDBGrid的OnTitleClick方法上,您可以执行如下操作...
我确信有很多方法可以优化它,但是这取决于你使用的组件的能力。上面的例子使用了一个查询组件,但是如果你使用了一个表组件,你会改变使用的索引而不是'order by'子句。
这里对SQL的处理是非常基本的版本。它不处理SQL批处理语句之类的东西,这可能会导致多个“order by..”子句或注解SQL语句,即忽略括号中的注解“{..}”或单行注解“//”
问候
xfb7svmp2#
Delphi 有
TClientDataset
。并且TQuery
可以使用在数据库上显式创建的索引来对IndexName
属性上的数据进行排序。6jjcrrmo3#
以下是一些如何执行此操作的示例:Sorting records in Delphi DBGrid by Clicking on Column Title.
如前所述,如果您使用
TClientDataSet
(TDBGrid
的OnTitleClick
中的cds.IndexFieldNames := Column.FieldName
),排序非常简单,但是如果您不能做到这一点,您可以重新生成查询(您已经声明不想这样做)或获得更高级的数据网格,如Express Quantum Grid(我认为它允许您排序)。ngynwnxp4#
在TDBGrid的OnTitleClick方法上,您可以编写以下简单代码:
jum4pzuy5#
示例:(https://www.thoughtco.com/sort-records-in-delphi-dbgrid-4077301)
xt0899hw6#
如果您正在使用
TFDQuery
、TDataSource
和TDBGrid
的组合,您可以通过这种简单的方式订购!将其放在帮助文件中,以便以后可以再次使用它。
db2dz4w87#
升降模式
9fkzdhlc8#
这实际上是通过对数据集进行排序来完成的,然后网格会反映更改。通过在该列的数据集字段上创建索引,可以很容易地完成这一操作。当然,这只能在支持索引排序的数据集上完成,例如
TClientDataset
。