Ordem alfabetica no DBGRID

01/02/2006

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


$grandaum$

Respostas

01/02/2006

Michael

Olá!

O [b:ca97ccd8d7]DBGrid [/b:ca97ccd8d7]reflete a ordem dos registros no [b:ca97ccd8d7]DataSet [/b:ca97ccd8d7]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 [b:ca97ccd8d7]ClientDataSet[/b:ca97ccd8d7], por exemplo, basta definir a propriedade [b:ca97ccd8d7]IndexFieldNames [/b:ca97ccd8d7]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 [b:ca97ccd8d7]OnTitleClick[/b:ca97ccd8d7], na classe [b:ca97ccd8d7]TDBGrid[/b:ca97ccd8d7], que possui como parâmetro a coluna correspondente ao clique.

[]´s


Responder Citar

01/02/2006

$grandaum$

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


Responder Citar

01/02/2006

Massuda

Inclua [b:460861cad8]ORDER BY[/b:460861cad8] nos comandos SQL que você estiver usando.


Responder Citar

01/02/2006

$grandaum$

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


Responder Citar

01/02/2006

Massuda

Eu não entendo muito de BD, talvez tenha forma melhor de fazer isso, mas no OnTitleClick do DBGrid, você porecisa fazer algo assim...
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.


Responder Citar

04/03/2006

Erivando

Olá! O [b:6aa72024e4]DBGrid [/b:6aa72024e4]reflete a ordem dos registros no [b:6aa72024e4]DataSet [/b:6aa72024e4]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 [b:6aa72024e4]ClientDataSet[/b:6aa72024e4], por exemplo, basta definir a propriedade [b:6aa72024e4]IndexFieldNames [/b:6aa72024e4]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 [b:6aa72024e4]OnTitleClick[/b:6aa72024e4], na classe [b:6aa72024e4]TDBGrid[/b:6aa72024e4], que possui como parâmetro a coluna correspondente ao clique. []´s


Amigo Michael,

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

r@mos
MSN: inforamos@inforamos.com


Responder Citar

15/03/2006

Michael

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


Responder Citar

15/03/2006

Michael

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


Responder Citar

15/03/2006

Paullsoftware

via SQL por que vc não faz assim no evento OnTitleClick do grid
SQL = ´Select * From Clientes´ //primeira linha ´Order By Nome´//Segunda linha

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


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


Responder Citar

15/03/2006

Michael

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


Responder Citar

15/03/2006

Michael

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


Responder Citar