Cómo ordenar una columna en Lazarus
[wpdm_package id=’834′]
Código fuente para ordenar la columna de un dbgrid al pulsar sobre el título de la cabecera. Comprobará si estaba ordenado de forma ascendente, si es así ordenará la columna de forma descendente y si está ordenado de forma descendente ordenará la columna de forma ascendente.
Con solo cuatro líneas de código lo tenemos desarrollado.
¡¡¡OjO!!! hay que añadir la clase «ZAbstractRODataset».
También he puesto un label para saber los registros que tenemos y el registro en el que nos encontramos, cambiando cada vez que cambie el datasource.
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, db, FileUtil, ZConnection, ZDataset, Forms, Controls,
Graphics, Dialogs, DbCtrls, DBGrids, StdCtrls, ZAbstractRODataset;
type
{ TForm1 }
TForm1 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
Label1: TLabel;
ZConnection1: TZConnection;
ZReadOnlyQuery1: TZReadOnlyQuery;
procedure DataSource1DataChange(Sender: TObject; Field: TField);
procedure DBGrid1TitleClick(Column: TColumn);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
st:zabstractrodataset.TSortType;
begin
st:=zreadonlyquery1.SortType;
zreadonlyquery1.SortedFields:=column.FieldName;
if st=stAscending then
zreadonlyquery1.SortType:=stDescending
else
zreadonlyquery1.SortType:=stAscending;
datasource1.DataSet.First;
end;
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
label1.Caption:='Registro ' +inttostr(zreadonlyquery1.RecNo)+' de '+inttostr(zreadonlyquery1.RecordCount);
end;
end.