Como ordenar os campos do DBGrid atraves da colunas

Delphi

25/09/2004

Como eu posso ordenar os campos no DBGrid, clicando na coluna
correspondete do campo, sem usar ClientDataSet e sem usar Query.
- Estou utilizando Delphi 6 / ADO / Access 2000
AdoConnect - AdoTable - DataSource

Desde já obrigado.


Canastra

Canastra

Curtidas 0

Respostas

Rômulo Barros

Rômulo Barros

25/09/2004

Evento CellClick do DBGrid

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
  ClientDataSet1.IndexFieldNames := Column.FieldName;
end;


:wink: :wink: :wink: :wink: :wink:


GOSTEI 0
Joao_schroeder

Joao_schroeder

25/09/2004

Talvez não seja o que queres, mas também é útil.
Ao clicar no título do DBGrid ele irá ordenar pelo campo clicado.



procedure TF_con_cadcli.DBGrid1TitleClick(Column: TColumn);
var
posicao: integer;
begin
with IBQuery1 do
begin
if active then
Close;
with SQL do
begin
posicao := pos(´ORDER BY´, UpperCase(Text));
if posicao = -1 then
Add(´ORDER BY ´ + Column.FieldName)
else
Text := Copy(Text, 1, Posicao - 1) + ´ORDER BY ´ + Column.FieldName;
end;
Open;
end;
// column.Font.color:=clblue;

esta última linha faz com que mude a cor da coluna clicada.


GOSTEI 0
Canastra

Canastra

25/09/2004

Estou usando ADOTable, sou principiante em Delphi e não sei utilizar e
configurar o componente ClientDataSet.

Se puder me explicar usando AdoTable, ótimo, caso contratio favor
me explicar quais as configurações das propriedades e código dos
eventos.


Desde já O B R I G A D O ...........


GOSTEI 0
Uildenei

Uildenei

25/09/2004

voce pode fazer da forma facil:

no evento OnTitleclick poe o codigo abaixo ...

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
if (Pos(Column.FieldName, tb.IndexFieldNames) > 0)and(Pos(´DESC´, tb.IndexFieldNames) = 0) then
tb.IndexFieldNames:=tb.IndexFieldNames + ´ DESC´
else
tb.IndexFieldNames:=Column.FieldName;
end;

senao pode usar a propriedade TIndexDefs
e criar os indices e fazer o tratamento necessario.


GOSTEI 0
Canastra

Canastra

25/09/2004

Uildenei,


Fiz como falou, e deu tudo certo.


O B R I G A D O.........................


GOSTEI 0
Ezequias_rocha

Ezequias_rocha

25/09/2004

Estou tentando colorir a coluna clicada para informar por qual está ordenada mas está dando um erro de Access Violation (como se a coluna não estivesse pronta)

Segue código abaixo:


Var posicao, i:integer;
begin
inherited;
With (dsPrincipal.DataSet as TQuery).SQL do
Begin
posicao := pos(´ORDER BY´, UpperCase(Text));
if posicao = -1 then
Add(´ORDER BY ´ + Column.FieldName)
else
(dsPrincipal.DataSet as TQuery).SQL.text := Copy((dsPrincipal.DataSet as TQuery).SQL.text, 1, Posicao - 1) + ´ORDER BY ´ + Column.FieldName;

dsPrincipal.DataSet.Open;
end;
column.Color:= clBlack;


GOSTEI 0
Danilo Oliveira

Danilo Oliveira

25/09/2004

Tenho essa mesma duvida só que pra FMX alguém poderia me ajudar?
GOSTEI 0
POSTAR