ListView: Ordenação Descendente no OnTitleClick
Olá programadores bom dia.
Através de um artigo da Clube Delphi 30, estou usando o componente
ListView para exibir os dados de uma tabela(pasmem dbf).
Agora o que eu gostaria de fazer e que não explica no artigo é
a ordenação descendente.
a procedure para ordenação ascendente é esta:
Li no help do Delphi:
Note: FindIndexForFields can only locate ascending indexes. To include descending indexes in the search, use GetIndexForFields.
mas não consegui usar
se alguem tiver uma dica.
Através de um artigo da Clube Delphi 30, estou usando o componente
ListView para exibir os dados de uma tabela(pasmem dbf).
Agora o que eu gostaria de fazer e que não explica no artigo é
a ordenação descendente.
a procedure para ordenação ascendente é esta:
[color=green:eb6073e625][/color:eb6073e625]
procedure TFrmBoletoLaser.lsvRetornoColumnClick(Sender: TObject; Column: TListColumn); const aCampo : array [0..13] of string = (´TIPO´,´TITULO´,´DESCRICAO´, ´DATVEN´,´VLRTITULO´,´VLRPGTO´,´DATENT´,´DATLIQ´,´VLRJUROS´,´VLRABAT´, ´VLRIOF´,´VLRDESC´,´VLRMORA´,´NBANCO´); var sCampo : string; begin sCampo := aCampo[Column.index]; try cdsRetorno.IndexDefs.FindIndexForFields(sCampo); except on EDatabaseError do cdsRetorno.AddIndex(´Index´+sCampo,sCampo,[]); end; cdsRetorno.IndexFieldNames := sCampo; lsvRetorno.Invalidate; end;
Li no help do Delphi:
Note: FindIndexForFields can only locate ascending indexes. To include descending indexes in the search, use GetIndexForFields.
mas não consegui usar
se alguem tiver uma dica.
Macario
Curtidas 0
Respostas
Alex Maia
13/09/2004
Como os dados estão vindo de uma tabela, acho que vc poderia realizar esta ordenação nela, pois qualquer alteração na tabela se reflete no listview.
Falow!
Falow!
GOSTEI 0
Macario
13/09/2004
Olá Alex.
Entao com a [b:09e8926e85]procedure[/b:09e8926e85] , ja faz isso, ordena a tabela
o que não estou conseguindo e a ordenação descendete.
Entao com a [b:09e8926e85]procedure[/b:09e8926e85] , ja faz isso, ordena a tabela
o que não estou conseguindo e a ordenação descendete.
GOSTEI 0
Macario
13/09/2004
ola colegas fazendo uma pesquisa mais refinada achei isso, é pra dbgrid
mas usa clientdataset entao ela serve, mas não ta correta
se algume puder me ajudar eu agradeço.
mas usa clientdataset entao ela serve, mas não ta correta
se algume puder me ajudar eu agradeço.
procedure TfmMasterGrid.grCadastroTitleClick(Column: TbsColumn); var index: integer; xCampoPesq: string; begin if Column.FieldName = ´´ then Exit; try if not (dsCadastro.DataSet = nil) then begin xCampoPesq := lowercase(Column.FieldName); if (TClientDataSet(dsCadastro.DataSet).IndexName <> ´ix´+xCampoPesq) then TClientDataSet(dsCadastro.DataSet).IndexName := ´ix´+xCampoPesq else begin index := TClientDataSet(dsCadastro.DataSet).IndexDefs.IndexOf(´ix´+xCampoPesq); if xTitle then begin if (ixDescending in TClientDataSet(dsCadastro.DataSet).IndexDefs.Items[index].Options) then TClientDataSet(dsCadastro.DataSet).IndexDefs.Items[index].Options := TClientDataSet(dsCadastro.DataSet).IndexDefs.Items[index].Options - [ixDescending] else TClientDataSet(dsCadastro.DataSet).IndexDefs.Items[index].Options := TClientDataSet(dsCadastro.DataSet).IndexDefs.Items[index].Options + [ixDescending]; dsCadastro.DataSet.Close; dsCadastro.DataSet.Open; end; end; dsCadastro.DataSet.First; end; except // end; end;
GOSTEI 0
Macario
13/09/2004
UP :arrow: 8) 8) 8)
GOSTEI 0
Macario
13/09/2004
Aproveitando, outra pergunta.
Quem tem material ou exemplos de uso do ListView.
Segunda a edição 30 da Clube Delphi, ele é um componente nativo do windows, e que ele assume as caracteristicas de cada, versão.
Por que comigo não acontece isso? Estou usando, mas quando rodo a aplicação no Windows XP, ele nao assume as caracteristicas visuais do XP (isso vale pro TButton tambem). Quem me esclarece isso?
[b:90e09e23b2][color=red:90e09e23b2]ListView um excelente componente[/color:90e09e23b2][/b:90e09e23b2]
Quem tem material ou exemplos de uso do ListView.
Segunda a edição 30 da Clube Delphi, ele é um componente nativo do windows, e que ele assume as caracteristicas de cada, versão.
Por que comigo não acontece isso? Estou usando, mas quando rodo a aplicação no Windows XP, ele nao assume as caracteristicas visuais do XP (isso vale pro TButton tambem). Quem me esclarece isso?
[b:90e09e23b2][color=red:90e09e23b2]ListView um excelente componente[/color:90e09e23b2][/b:90e09e23b2]
GOSTEI 0
Macario
13/09/2004
Olá programadoers, bom dia.
Pelo Visto como foi citado na edição 30 da revista clube delphi, esse componente não é muito utilizado.
Acho que vou mandar minha duvida pra revista.
Já que as duvidas acima se quer são olhadas.
Imagina se eu perguntar como fazer pra agrupar, como disponivel no XP.
Pelo Visto como foi citado na edição 30 da revista clube delphi, esse componente não é muito utilizado.
Acho que vou mandar minha duvida pra revista.
Já que as duvidas acima se quer são olhadas.
Imagina se eu perguntar como fazer pra agrupar, como disponivel no XP.
GOSTEI 0
Ipc$
13/09/2004
No evento OnColumnClick execute Listview1.AlphaSort.
Com isto ele gera o evento onCompare.
No evento onCompare coloque:
procedure TForm1.Listview1Compare(Sender: TObject; Item1,
Item2: TListItem; Data: Integer; var Compare: Integer);
begin
Compare := CompareText(Item1.SubItems[indicedacoluna], Item2.SubItems[indicedacoluna]); // ascendente
Compare := -Compare // descendente
end;
Com isto ele gera o evento onCompare.
No evento onCompare coloque:
procedure TForm1.Listview1Compare(Sender: TObject; Item1,
Item2: TListItem; Data: Integer; var Compare: Integer);
begin
Compare := CompareText(Item1.SubItems[indicedacoluna], Item2.SubItems[indicedacoluna]); // ascendente
Compare := -Compare // descendente
end;
GOSTEI 0
Macario
13/09/2004
Não funcionou....colega, to perdendo a referencia com a tabela
GOSTEI 0
Ipc$
13/09/2004
Funciona sim; vc colocou o índice correto da coluna?
Coloque:
ListView1.Items.BeginUpdate;
ListView1.AlphaSort;
ListView1.Items.EndUpdate;
Como assim?
Coloque:
ListView1.Items.BeginUpdate;
ListView1.AlphaSort;
ListView1.Items.EndUpdate;
Não funcionou....colega, to perdendo a referencia com a tabela
Como assim?
GOSTEI 0
Macario
13/09/2004
up :arrow: :arrow: :arrow: :idea: :idea: :?: :?: :?:
Caso alguem tenha uma dica. Fico grato.
Caso alguem tenha uma dica. Fico grato.
GOSTEI 0
Macario
13/09/2004
Olá Programadores....
Continuo a duvida quanto a ordenação.
Nao consegui contato com a revista :?
Algum tem algum exemplo?
Continuo a duvida quanto a ordenação.
Nao consegui contato com a revista :?
Algum tem algum exemplo?
GOSTEI 0
Massuda
13/09/2004
Sei que não resolve seu problema sobre ordenação mas...
[quote:a22d16c3a3=´Macario o Aspone´]... Segunda a edição 30 da Clube Delphi, ele é um componente nativo do windows, e que ele assume as caracteristicas de cada, versão. Por que comigo não acontece isso? Estou usando, mas quando rodo a aplicação no Windows XP, ele nao assume as caracteristicas visuais do XP (isso vale pro TButton tambem). Quem me esclarece isso?[/quote:a22d16c3a3]
Para que seu programa assuma a aparência do Windows XP, seu programa deve incluir um componente XPManifest (da aba Win32 se você estiver usando D7 ou melhor) ou ThemeManager (use se você estiver usando D6 ou anterior - baixe do [url=http://www.delphi-gems.com/ThemeManager.php]site do autor[/url]); ambos os componentes são do mesmo autor.
Mesmo que você esteja usando D7 ou melhor, vale a pena dar uma olhada no [url=http://www.delphi-gems.com/ThemeManager.php]site do autor[/url] para ter uma idéia das limitações e problemas existentes.
[quote:a22d16c3a3=´Macario o Aspone´]... Segunda a edição 30 da Clube Delphi, ele é um componente nativo do windows, e que ele assume as caracteristicas de cada, versão. Por que comigo não acontece isso? Estou usando, mas quando rodo a aplicação no Windows XP, ele nao assume as caracteristicas visuais do XP (isso vale pro TButton tambem). Quem me esclarece isso?[/quote:a22d16c3a3]
Para que seu programa assuma a aparência do Windows XP, seu programa deve incluir um componente XPManifest (da aba Win32 se você estiver usando D7 ou melhor) ou ThemeManager (use se você estiver usando D6 ou anterior - baixe do [url=http://www.delphi-gems.com/ThemeManager.php]site do autor[/url]); ambos os componentes são do mesmo autor.
Mesmo que você esteja usando D7 ou melhor, vale a pena dar uma olhada no [url=http://www.delphi-gems.com/ThemeManager.php]site do autor[/url] para ter uma idéia das limitações e problemas existentes.
GOSTEI 0
Emerson Nascimento
13/09/2004
tente assim (não testei):
procedure TFrmBoletoLaser.lsvRetornoColumnClick(Sender: TObject; Column: TListColumn); const aCampo : array [0..13] of string = (´TIPO´,´TITULO´,´DESCRICAO´, ´DATVEN´,´VLRTITULO´,´VLRPGTO´,´DATENT´,´DATLIQ´,´VLRJUROS´,´VLRABAT´, ´VLRIOF´,´VLRDESC´,´VLRMORA´,´NBANCO´); var sCampo,sIndice : string; lDecrescente: boolean; Indice: TIndexDef; begin sCampo := aCampo[Column.index]; lDecrescente := cdsRetorno.IndexName=(´Index´+sCampo); try if lDecrescente then Indice := cdsRetorno.IndexDefs.GetIndexForFields(sCampo,True) else Indice := cdsRetorno.IndexDefs.FindIndexForFields(sCampo); sIndice := Indice.Name; except on EDatabaseError do begin sIndice := ´Index´+sCampo; if lDecrescente then begin sIndice := sIndice+´_D´; cdsRetorno.AddIndex(sIndice,sCampo,[ixDescending]); end else cdsRetorno.AddIndex(sIndice,sCampo,[]); end; end; cdsRetorno.IndexName := sIndice; lsvRetorno.Invalidate; end;
GOSTEI 0
Raserafim
13/09/2004
Macario, nesta imagem que você colocou, na primeira coluna onde tem a figura de um V (verde) ou X (vermelho) está funcionando como checkbox? ou seja, quando clico ela muda o status?
Se estiver, por favor, me diz como que você fez isso.
valeu.
Se estiver, por favor, me diz como que você fez isso.
valeu.
GOSTEI 0
Macario
13/09/2004
Ola raserafim,
eu simulo, um check.
Seria mais especificamente uma ´[b:91ba74c5c6]Flag[/b:91ba74c5c6]´...
Tenho um campo no CDS em mudo para [b:91ba74c5c6]S[/b:91ba74c5c6] ou [b:91ba74c5c6]N[/b:91ba74c5c6].
E ai conforme o status eu mudo o imagem index do ListView.
eu simulo, um check.
Seria mais especificamente uma ´[b:91ba74c5c6]Flag[/b:91ba74c5c6]´...
Tenho um campo no CDS em mudo para [b:91ba74c5c6]S[/b:91ba74c5c6] ou [b:91ba74c5c6]N[/b:91ba74c5c6].
E ai conforme o status eu mudo o imagem index do ListView.
GOSTEI 0
Emerson Nascimento
13/09/2004
tente assim (não testei):
procedure TFrmBoletoLaser.lsvRetornoColumnClick(Sender: TObject; Column: TListColumn); const aCampo : array [0..13] of string = (´TIPO´,´TITULO´,´DESCRICAO´, ´DATVEN´,´VLRTITULO´,´VLRPGTO´,´DATENT´,´DATLIQ´,´VLRJUROS´,´VLRABAT´, ´VLRIOF´,´VLRDESC´,´VLRMORA´,´NBANCO´); var sCampo,sIndice : string; lDecrescente: boolean; Indice: TIndexDef; begin sCampo := aCampo[Column.index]; lDecrescente := cdsRetorno.IndexName=(´Index´+sCampo); try if lDecrescente then Indice := cdsRetorno.IndexDefs.GetIndexForFields(sCampo,True) else Indice := cdsRetorno.IndexDefs.FindIndexForFields(sCampo); sIndice := Indice.Name; except on EDatabaseError do begin sIndice := ´Index´+sCampo; if lDecrescente then begin sIndice := sIndice+´_D´; cdsRetorno.AddIndex(sIndice,sCampo,[ixDescending]); end else cdsRetorno.AddIndex(sIndice,sCampo,[]); end; end; cdsRetorno.IndexName := sIndice; lsvRetorno.Invalidate; end;
isso funcionou?
GOSTEI 0
Macario
13/09/2004
Olá emerson.en
Fiz um teste e não funcionou, colega.
Se tiver algum comentário. :roll:
Fiz um teste e não funcionou, colega.
Se tiver algum comentário. :roll:
GOSTEI 0
Emerson Nascimento
13/09/2004
como você monta sua listview a partir do cds? seria necessário vc refazê-la depois de ordenar, não?
GOSTEI 0
Raserafim
13/09/2004
Macario, você pode detalhar melhor como fazer?
GOSTEI 0
Emerson Nascimento
13/09/2004
Macario, eu fiz um teste e funcionou..
GOSTEI 0
Macario
13/09/2004
Ola colegas,
emerson.en, estarei testando novamente entao, blz. E obrigado por sua atenção.
raserafim apos testar(e testarei ate sexta) a dica do emerson, lhe digo os passos necessarios, pois ai esta completa.
Entao até...lá
emerson.en, estarei testando novamente entao, blz. E obrigado por sua atenção.
raserafim apos testar(e testarei ate sexta) a dica do emerson, lhe digo os passos necessarios, pois ai esta completa.
Entao até...lá
GOSTEI 0