Ir para conteúdo
Fórum Script Brasil
  • 0

Indexar em orden decrecente no dbCrid


William - TI

Pergunta

Bom dia.

E ai galera mais uma vez estou aqui com um problema, preciso indexar de orden inversa ao clicar no titulo do Grid.

so que não quero usar a pesquisa com order by campo desc

ordenar normal eu consigo fazendo assim no ontitleclick do dbgrid.

qryQuery.IndexFieldNames:= dbgrid1.Columns[Column.index].FieldName;

agora inverso não faço nem ideia de como fazer.

mais uma vez grato pela atenção.

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Ae Amigo, uhhuhu, toma ai o que você precisa!

Coloque essa procedure:

procedure 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;
e depois vá até o DBGrid on TitleClick e coloque isto:
OrdenaDataSetGrid(ClientDataSet, Column, DBGrid1);

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0
Amigo estou tendo uma certa dificuldade para usar o codigo pois uso o componente Zeus, componente query.

O que o amigo Douglas_Soares te passou é um código generico que irá usar o DBGrid independente de ser IBQuery ou ZQuery ou ADOQuery

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Caros amigo ainda não consegui. aqui vai minha duvida.

como uso Zeues auterei o codigo assim.

procedure OrdenaDataSetGrid(

var CDS: TZMySqlQuery; Column: TColumn; var dbgPrin: TDBGrid);

auterei de TClientDataSet; para TZMySqlQuery;

porem me da um erro nesta parte

if bolUsed then

CDS.DeleteIndex(Column.Field.FieldName); (Aqui da erro)

try

CDS.AddIndex(Column.Field.FieldName, Column.Field.FieldName,idOptions, '', '', 0); (aqui da erro)

strColumn := Column.Field.FieldName;

imagino que o erro esta por na query não deve exixtir

DeleteIndex e nem AddIndex

gostaria de saber por qual eu substituo.

mais uma vez grato pela atenção.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...