Como ordenar dbGrid em Delphi
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
Tenho na minha tela apenas um dbGrid1 e um datasource.
Obrigado um abraço
Gustavo Fernandes
Curtidas 0
Melhor post
William
22/08/2012
Caros colegas acho q podemos simplificar o código assim:
procedure TForm1.grdTitleClick(Column: TColumn);
begin
ClientDataSet.IndexFieldNames := Column.FieldName;
end;
GOSTEI 1
Mais Respostas
Francisco Macário
22/08/2012
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
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.
GOSTEI 0
Gustavo Bretas
22/08/2012
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!
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!
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!
GOSTEI 0
Gustavo Bretas
22/08/2012
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;
GOSTEI 1
Carla Batista
22/08/2012
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!
Obrigada pessoal!
GOSTEI 0
Gustavo Fernandes
22/08/2012
Gente muito obrigado, não sabem o quanto ajudarão.
GOSTEI 0