Array
(
)

Ordem alfabetica no DBGRID

$grandaum$
   - 01 fev 2006

Como eu faço para ordena meu dbgrid em ordem alfabetica quando eu clicar nas colunas?


Michael
   - 01 fev 2006

Olá!

O DBGrid reflete a ordem dos registros no DataSet associado a ele. Portanto, vc deve ordenar os dados neste componente para alterar a sua visualização.

Esta ordenação depende de quais componentes de acesso a dados vc está usando. Se for um através de um ClientDataSet, por exemplo, basta definir a propriedade IndexFieldNames para o nome do(s) campo(s) usado(s) como base na comparação. Vale lembrar que isso irá gerar uma ordenação ascendente.

E para capturar o clique do mouse no título de uma coluna, existe o evento OnTitleClick, na classe TDBGrid, que possui como parâmetro a coluna correspondente ao clique.

[]´s


$grandaum$
   - 01 fev 2006

Michael eh o seguinte eu to usando um ibDataSet para o cadastro e uma ibQuery para fazer as consultas e mostrar no grid mas nenhum dos dois tem esse propriedade IndexFieldNames


Massuda
   - 01 fev 2006

Inclua ORDER BY nos comandos SQL que você estiver usando.


$grandaum$
   - 01 fev 2006

ibConsulta.SQL.Add(´select*from ficha where ficha.matematica=1 and Upper(ficha.nome) Like Upper(:Varnome)´)


em qual parte do comando vai entrar o order by


Massuda
   - 01 fev 2006

Eu não entendo muito de BD, talvez tenha forma melhor de fazer isso, mas no OnTitleClick do DBGrid, você porecisa fazer algo assim...#Código

ibConsulta.Close;
ibConsulta.SQL.Clear;
ibConsulta.SQL.Add(´select*from ficha where ficha.matematica=1 and Upper(ficha.nome) Like Upper(:Varnome) order by ´ + Column.FieldName);
ibConsulta.Open;
...onde o Column é o parâmetro passado no OnTitleClick.


Erivando
   - 04 mar 2006


Citação:
Olá!

O DBGrid reflete a ordem dos registros no DataSet associado a ele. Portanto, vc deve ordenar os dados neste componente para alterar a sua visualização.

Esta ordenação depende de quais componentes de acesso a dados vc está usando. Se for um através de um ClientDataSet, por exemplo, basta definir a propriedade IndexFieldNames para o nome do(s) campo(s) usado(s) como base na comparação. Vale lembrar que isso irá gerar uma ordenação ascendente.

E para capturar o clique do mouse no título de uma coluna, existe o evento OnTitleClick, na classe TDBGrid, que possui como parâmetro a coluna correspondente ao clique.

[]´s


Amigo Michael,

esta ordenação ascendente gerada pelo ClientDataSet em IndexFieldNames não é a mesma de order by no comando sql?
podemos fazer com q o ClientDataSet faça uma mesma ordenação de order by ?

r@mos
MSN: inforamos@inforamos.com


Michael
   - 15 mar 2006

Sim, mas a ordenação feita pelo ClientDataSet é processada em memória, e por isso muito mais rápida do que via comando SQL, além de evitar uma requisição desnecessária ao banco de dados.

[]´s


Michael
   - 15 mar 2006

Sim, mas a ordenação feita pelo ClientDataSet é processada em memória, e por isso muito mais rápida do que via comando SQL, além de evitar uma requisição desnecessária ao banco de dados.

[]´s


Paullsoftware
   - 15 mar 2006

via SQL por que vc não faz assim no evento OnTitleClick do grid

Citação:
SQL = ´Select * From Clientes´ //primeira linha
´Order By Nome´//Segunda linha

#Código


Screen.Cursor := crHourGlass;
with DM,QYLOCACOES do
begin
Close;
SQL[1] := ´ORDER BY ´+Column.FieldName;
Open;
end;
Screen.Cursor := crDefault;


daí é só clicar no título que vc quer ordenar e pronto! :wink:


Michael
   - 15 mar 2006

Sim, mas a ordenação feita pelo ClientDataSet é processada em memória, e por isso muito mais rápida do que via comando SQL, além de evitar uma requisição desnecessária ao banco de dados.

[]´s


Michael
   - 15 mar 2006

Desculpem-me as mensagens repetidas, mas deu um erro ao enviar o email para cada observador do post, e eu fiquei reenviando a mensagem sem saber que ela já tinha sido postada. Depois que caiu a ficha de que o problema era no envio dos emails...

[]s