Fórum Ordenação no DBGrid #7411

07/07/2009

0

 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

Responder

Posts

08/07/2009

Wesley Yamazack

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
Responder

Gostei + 0

08/07/2009

Rogério Nascimento

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


 Abraços,

 Rogério
Responder

Gostei + 0

09/07/2009

Wesley Yamazack

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


Abraço,

Wesley Y
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar