Fórum Ordenação no DBGrid #7411
07/07/2009
0
Pelo Curso do Guinter sobre segredos do DBGrid vi como ordernar usando o IndexFieldNames do ClientDataSet, mas acontece que qdo ordenado uma vez, se eu clicar novamente na mesma coluna ele não reordena, como faço para ele reordernar?
Abraços,
Rogério
Rogério Nascimento
Curtir tópico
+ 0Posts
08/07/2009
Wesley Yamazack
Segue uma função para te ajudar.
//função
procedure TForm1.OrdenaDataSetGrid(
var CDS: TClientDataSet; Column: TColumn; var dbgPrin: TDBGrid);
const
idxDefault = 'DEFAULT_ORDER';
var
strColumn : string;
i : integer;
bolUsed : boolean;
idOptions : TIndexOptions;
begin
strColumn := idxDefault;
if Column.Field.FieldKind in [fkCalculated, fkLookup, fkAggregate] then
Exit;
if Column.Field.DataType in [ftBlob, ftMemo] then
Exit;
for i := 0 to dbgPrin.Columns.Count -1 do
dbgPrin.Columns[i].Title.Font.Style := [];
bolUsed := (Column.Field.FieldName = CDS.IndexName);
CDS.IndexDefs.Update;
for i := 0 to CDS.IndexDefs.Count - 1 do
begin
if CDS.IndexDefs.Items[i].Name = Column.Field.FieldName then
begin
strColumn := Column.Field.FieldName;
case (CDS.IndexDefs.Items[i].Options = [ixDescending]) of
true : idOptions := [];
false : idOptions := [ixDescending];
end;
end;
end;
if (strColumn = idxDefault) or (bolUsed) then
begin
if bolUsed then
CDS.DeleteIndex(Column.Field.FieldName);
try
CDS.AddIndex(Column.Field.FieldName, Column.Field.FieldName,idOptions, '', '', 0);
strColumn := Column.Field.FieldName;
except
if bolUsed then
strColumn := idxDefault;
end;
end;
try
CDS.IndexName := strColumn;
Column.Title.Font.Style := [fsbold];
except
CDS.IndexName := idxDefault;
end;
end;
no Evento onTitleClick do teu DBGRID faça o seguinte
OrdenaDataSetGrid(ClientDataSet1,Column,DBGrid1);
Com isso acho que você mata teu problema.
Att,
Wesley Y
Gostei + 0
08/07/2009
Rogério Nascimento
Abraços,
Rogério
Gostei + 0
09/07/2009
Wesley Yamazack
Se precisar só postar que agente resolve.
Abraço,
Wesley Y
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)