ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Ordenação DBGrid + FDQuery [Resolvido]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
wjuniordias
Profissional
Profissional


Registrado: Sexta-Feira, 16 de Março de 2012
Mensagens: 667

MensagemEnviada: Qui Out 04, 2018 4:24 pm    Assunto: Ordenação DBGrid + FDQuery [Resolvido] Responder com Citação

Galera, preciso converter o código abaixo para FDQuery:
Código:

procedure TFrmPrincipal.dbgPesqTitleClick(Column: TColumn);
var
  vlbMesmoCampo: Boolean;
  vloIndices:    TStrings;
  vliCont:       Integer;
begin
  inherited;
  vlbMesmoCampo := False;
  vloIndices    := TStringList.Create;
  TClientDataSet(Column.Grid.DataSource.DataSet).GetIndexNames(vloIndices);
  TClientDataSet(Column.Grid.DataSource.DataSet).IndexName := EmptyStr;
  vliCont                                                  := vloIndices.IndexOf('idx' + Column.FieldName);

  if vliCont >= 0 then
  begin
    vlbMesmoCampo := not(ixDescending in TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs[vliCont].Options);
    TClientDataSet(Column.Grid.DataSource.DataSet).DeleteIndex('idx' + Column.FieldName);
  end;

  TClientDataSet(Column.Grid.DataSource.DataSet).AddIndex('idx' + Column.FieldName, Column.FieldName, [],
    IfThen(vlbMesmoCampo, Column.FieldName));
  TClientDataSet(Column.Grid.DataSource.DataSet).IndexName := 'idx' + Column.FieldName;
end;


Eu uso este código para ordenar a caso o usuário clique no título de alguma coluna do DBGrid, porém, usando TClienteDataSet, estou mudando tudo para FireDAC, e no código acima, tentei substituir onde possui "TClientDataSet" por "TFDQuery", mas está dando erro no método "AddIndex", parece que tem alguns parâmetros a mais no FDQuery e não estou conseguindo acertar. Se alguém puder ajudar agradeço.
_________________
"O sábio nunca diz tudo o que pensa, mas pensa sempre tudo o que diz." (Aristóteles)


Editado pela última vez por wjuniordias em Seg Out 08, 2018 8:42 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário MSN Messenger
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qui Out 04, 2018 5:12 pm    Assunto: Responder com Citação

Segue procedimento que uso abaixo. Ordena pelo título clicado e destaca a coluna:

Código:
procedure GridTitulo(Column: TColumn; DBGrid: TDBGrid);
var
  I: Integer;
begin
  With DBGrid do
  Begin
    // Retira o destaque de todas as colunas
    for I := 0 to Columns.Count - 1 do
      Columns[I].Title.Font.Style := Columns[I].Title.Font.Style - [fsBold, fsUnderline];
    // Destaca a coluna clicada
    Columns[Column.Index].Title.Font.Style := Columns[Column.Index].Title.Font.Style +
      [fsBold, fsUnderline];
  End;

  TFDQuery(DBGrid.DataSource.DataSet).IndexFieldNames := Column.FieldName;
end;

Exemplo de uso, no evento OnTitleClick do DBGrid:

Código:
GridTitulo(Column, DBGrid1);

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
wjuniordias
Profissional
Profissional


Registrado: Sexta-Feira, 16 de Março de 2012
Mensagens: 667

MensagemEnviada: Seg Out 08, 2018 8:39 am    Assunto: Responder com Citação

Obrigado natanbh1, o código funcionou, só tive que fazer uma pequena alteração para que quando o usuário clicasse na coluna mais de uma vez ele alternar entre ordem crescente e decrescente, segue a alteração, na verdade, eu apenas acrescentei esse código no final:

Código:

if TFDQuery(DBGrid.DataSource.DataSet).IndexFieldNames = Column.FieldName + ':D' then
  TFDQuery(DBGrid.DataSource.DataSet).IndexFieldNames := Column.FieldName + ':A'
else
  TFDQuery(DBGrid.DataSource.DataSet).IndexFieldNames := Column.FieldName + ':D'

_________________
"O sábio nunca diz tudo o que pensa, mas pensa sempre tudo o que diz." (Aristóteles)
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário MSN Messenger
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Seg Out 08, 2018 9:41 am    Assunto: Responder com Citação

Muito bom incremento. Já vou acrescentar na minha procedure também.
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB