GARANTIR DESCONTO

Fórum Como ordenar dbGrid em Delphi #422221

22/08/2012

0

Opa galera, estou com uma dúvida para ordenar um dbGrid em Delphi. Alguém pode me ajudar?

Tenho na minha tela apenas um dbGrid1 e um datasource.

Obrigado um abraço
Gustavo Fernandes

Gustavo Fernandes

Responder

Post mais votado

22/08/2012

Caros colegas acho q podemos simplificar o código assim:

procedure TForm1.grdTitleClick(Column: TColumn);
begin
    ClientDataSet.IndexFieldNames := Column.FieldName;
end;


William

William
Responder

Gostei + 1

Mais Posts

22/08/2012

Francisco Macário

Opa galera, estou com uma dúvida para ordenar um dbGrid em Delphi. Alguém pode me ajudar?

Tenho na minha tela apenas um dbGrid1 e um datasource.

Obrigado um abraço


E ai Gus.

Primeira dica, faça sempre, uma pesquisa no forum traz diversos resultados.

Segunda da uma olhada neste artigo [url]https://www.devmedia.com.br/Clicar-no-titulo-de-um-DBGrid-e-poder-ordenar-por-aquela-coluna-assim-como-faz-o-Windows-Explorer.html/16084[/url]

Espero ter ajudado.
Responder

Gostei + 0

22/08/2012

Gustavo Bretas

Gus, tudo certo?

Você so vaí conseguir ordenar as colunas sem refazer o select com ClientDataSet, segue um exemplo do que eu uso!

Adicione o código no evento OnTitleClick da Grid!

procedure TForm1.SuaGridTitleClick(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;


Só lembrando que esse código é genérico pra qualquer Grid, se vc quiser, pode colocá-lo em uma procedure e chamar de dentro do evento, ou declarar no FormPai se vc usar Herança!

Espero ter ajudado!
Responder

Gostei + 0

23/08/2012

Gustavo Bretas

wllfl, concordo em parte com você, a questão é que dessa forma a ordenação fica limitada a Ascendente!

Caros colegas acho q podemos simplificar o código assim:

procedure TForm1.grdTitleClick(Column: TColumn);
begin
    ClientDataSet.IndexFieldNames := Column.FieldName;
end;


Responder

Gostei + 1

23/08/2012

Carla Batista

Adorei a solução de vocês, sei que a dúvida não é minha mas me ajudou aqui numa ideia que tive.

Obrigada pessoal!
Responder

Gostei + 0

23/08/2012

Gustavo Fernandes

Gente muito obrigado, não sabem o quanto ajudarão.
Responder

Gostei + 0

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

Aceitar