Ordenação no DBGrid

07/07/2009

 Boa noite amigos, mais uma vez preciso da ajuda de vocês.


 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

Rogério Nascimento

Curtidas 0

Respostas

Wesley Yamazack

Wesley Yamazack

07/07/2009

Olá meu caro,
 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
Rogério Nascimento

Rogério Nascimento

07/07/2009

 Rapaz, tu caiu do céu, valeu  mais uma vez !!!!!


 Abraços,

 Rogério
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

07/07/2009

   Que nada meu amigo, estamos aqui a disposição!
   Se precisar só postar que agente resolve.


Abraço,

Wesley Y
GOSTEI 0
POSTAR