ListView: Ordenação Descendente no OnTitleClick
13/09/2004
0
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:
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
Posts
13/09/2004
Alex Maia
Falow!
13/09/2004
Macario
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.
13/09/2004
Macario
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;
15/09/2004
Macario
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]
16/09/2004
Macario
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.
16/09/2004
Ipc$
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;
16/09/2004
Macario
16/09/2004
Ipc$
Coloque:
ListView1.Items.BeginUpdate;
ListView1.AlphaSort;
ListView1.Items.EndUpdate;
Como assim?
28/09/2004
Macario
Caso alguem tenha uma dica. Fico grato.
01/02/2005
Macario
Continuo a duvida quanto a ordenação.
Nao consegui contato com a revista :?
[img:46eb2f533a]http://www.compilacom.com/images/OrdenarListview.jpg[/img:46eb2f533a]
Algum tem algum exemplo?
01/02/2005
Massuda
[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.
01/02/2005
Emerson Nascimento
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;
02/02/2005
Raserafim
Se estiver, por favor, me diz como que você fez isso.
valeu.
02/02/2005
Macario
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.
Clique aqui para fazer login e interagir na Comunidade :)