Fórum Como ordenar dbGrid em Delphi #422221
22/08/2012
0
Tenho na minha tela apenas um dbGrid1 e um datasource.
Obrigado um abraço
Gustavo Fernandes
Curtir tópico
+ 0Post mais votado
22/08/2012
procedure TForm1.grdTitleClick(Column: TColumn);
begin
ClientDataSet.IndexFieldNames := Column.FieldName;
end;
William
Gostei + 1
Mais Posts
22/08/2012
Francisco Macário
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
22/08/2012
Gustavo Bretas
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
23/08/2012
Gustavo Bretas
procedure TForm1.grdTitleClick(Column: TColumn);
begin
ClientDataSet.IndexFieldNames := Column.FieldName;
end;
Gostei + 1
23/08/2012
Carla Batista
Obrigada pessoal!
Gostei + 0
23/08/2012
Gustavo Fernandes
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)