Ordem alfabetica no DBGRID
Como eu faço para ordena meu dbgrid em ordem alfabetica quando eu clicar nas colunas?
$grandaum$
Curtidas 0
Respostas
Michael
01/02/2006
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
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
GOSTEI 0
$grandaum$
01/02/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
GOSTEI 0
Massuda
01/02/2006
Inclua [b:460861cad8]ORDER BY[/b:460861cad8] nos comandos SQL que você estiver usando.
GOSTEI 0
$grandaum$
01/02/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
em qual parte do comando vai entrar o order by
GOSTEI 0
Massuda
01/02/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......onde o Column é o parâmetro passado no OnTitleClick.
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;
GOSTEI 0
Erivando
01/02/2006
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
GOSTEI 0
Michael
01/02/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
[]´s
GOSTEI 0
Michael
01/02/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
[]´s
GOSTEI 0
Paullsoftware
01/02/2006
via SQL por que vc não faz assim no evento OnTitleClick do grid
daí é só clicar no título que vc quer ordenar e pronto! :wink:
SQL = ´Select * From Clientes´ //primeira linha
´Order By Nome´//Segunda linha
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:
GOSTEI 0
Michael
01/02/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
[]´s
GOSTEI 0
Michael
01/02/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
[]s
GOSTEI 0