ClientDataset
Uso o IndexFieldNames + nome do campo para indexar o clientdataset em memoria de modo crescente, porem como faço para fazer a indexacao decrescente ?
Abs
Abs
Felipeiw
Curtidas 0
Respostas
Luciano.lirio
21/11/2007
simples, clique no componente ClienteDataSet na propriedade IndexDef e adicione um novo indice, na propriedade [b:ecb402051b]Name[/b:ecb402051b] coloque o nome do indice e na propriedades [b:ecb402051b]Fields[/b:ecb402051b] informe o campo que vc quer ordenar depois va na properiedade [b:ecb402051b]Options[/b:ecb402051b] coloque ixDescending como true[b:ecb402051b][/b:ecb402051b].
depois cliente novamente no componente ClienteDataSet na propriedade [b:ecb402051b]IndexName[/b:ecb402051b] informe o nome do indice que vc criou.
Att,
Luciano
depois cliente novamente no componente ClienteDataSet na propriedade [b:ecb402051b]IndexName[/b:ecb402051b] informe o nome do indice que vc criou.
Att,
Luciano
GOSTEI 0
Fabiano Góes
21/11/2007
simples, clique no componente ClienteDataSet na propriedade IndexDef e adicione um novo indice, na propriedade [b:ea90a174b1]Name[/b:ea90a174b1] coloque o nome do indice e na propriedades [b:ea90a174b1]Fields[/b:ea90a174b1] informe o campo que vc quer ordenar depois va na properiedade [b:ea90a174b1]Options[/b:ea90a174b1] coloque ixDescending como true[b:ea90a174b1][/b:ea90a174b1].
depois cliente novamente no componente ClienteDataSet na propriedade [b:ea90a174b1]IndexName[/b:ea90a174b1] informe o nome do indice que vc criou.
Att,
Luciano
e como ordernar pelo click do titulo da coluna da grid, mais verificando se a coluna está ordanada Ascendente quando clicar ordenar Descendente e vise-versa ?
GOSTEI 0
Fabiano Góes
21/11/2007
até consegui uma forma de ordenar ascendente/descendente pelo titulo da grid, mais ainda não estou satisfeito porque da maneira que fiz fico fixo ao nome da coluna seria ideal parametrizar.
bom, criei 2 indices descendentes um pro campo ID e outro ro campo NAME
então faço assim:
sugestões para melhorar o código serão bem vindas.
bom, criei 2 indices descendentes um pro campo ID e outro ro campo NAME
então faço assim:
procedure TForm1.gridClientesTitleClick(Column: TColumn); begin if Column.FieldName = ´NAME´ then if (cdsClientes.IndexName = ´cdsClientesIndexNAMEDesc´) or (cdsClientes.IndexFieldNames <> ´NAME´) then cdsClientes.IndexFieldNames := ´NAME´ else cdsClientes.IndexName := ´cdsClientesIndexNameDesc´ else if Column.FieldName = ´ID´ then if (cdsClientes.IndexName = ´cdsClientesIndexIDDesc´) or (cdsClientes.IndexFieldNames <> ´ID´) then cdsClientes.IndexFieldNames := ´ID´ else cdsClientes.IndexName := ´cdsClientesIndexIDDesc´; end;
sugestões para melhorar o código serão bem vindas.
GOSTEI 0
Luciano.lirio
21/11/2007
felipeiw e Fabiano Góes
acho que o código abaixo vai funcionar da maneira que vcs querem.
acho que o código abaixo vai funcionar da maneira que vcs querem.
procedure TForm1.DBGrid1TitleClick(Column: TColumn); var Indice: String; FlagDesc: Boolean; begin // Coloquei o Random para mudar o nome do indice, se colocar o nome do indice fixo não funciona Indice := ´Indice´+IntToStr(Random(9999)); // Verifica se o campo anterior estáva em modo Ascendente ou Descendente FlagDesc := (ClientDataSet1.IndexDefs.Count > 0) and (ixDescending in ClientDataSet1.IndexDefs[0].Options); // Limpa o indice anterior ClientDataSet1.IndexDefs.Clear; case FlagDesc of True: ClientDataSet1.IndexDefs.Add(Indice,Column.FieldName,[]); False: ClientDataSet1.IndexDefs.Add(Indice,Column.FieldName,[ixDescending]); end; ClientDataSet1.IndexName := Indice; end;
GOSTEI 0
Luciano.lirio
21/11/2007
felipeiw e Fabiano Góes
acho que o código abaixo vai funcionar da maneira que vcs querem.
[b:9df6fcef9a]ESTE ÚLTIMO POST COLOCA EM ORDEM ASCENDENTE QUANDO MUDA A COLUNA E SÓ VAI COLOCAR NA ORDEM DESCENDENTE SE CLICAR NOVAMENTE NA MESMA COLUNA.[/b:9df6fcef9a]
[b:9df6fcef9a][/b:9df6fcef9a]
acho que o código abaixo vai funcionar da maneira que vcs querem.
[b:9df6fcef9a]ESTE ÚLTIMO POST COLOCA EM ORDEM ASCENDENTE QUANDO MUDA A COLUNA E SÓ VAI COLOCAR NA ORDEM DESCENDENTE SE CLICAR NOVAMENTE NA MESMA COLUNA.[/b:9df6fcef9a]
procedure TForm1.DBGrid1TitleClick(Column: TColumn); var Indice: String; FlagDesc: Boolean; begin // Coloquei o Random para mudar o nome do indice, se colocar o nome do indice fixo não funciona Indice := ´Indice´+IntToStr(Random(9999)); // Verifica se o campo anterior estáva em modo Ascendente ou Descendente FlagDesc := (ClientDataSet1.IndexDefs.Count > 0) and (ixDescending in ClientDataSet1.IndexDefs[0].Options); // Se a coluna do dbgrid força a Ascendente if (ClientDataSet1.IndexDefs.Count > 0) and (ClientDataSet1.IndexDefs[0].Fields <> Column.FieldName) then FlagDesc := True; // Limpa o indice anterior ClientDataSet1.IndexDefs.Clear; case FlagDesc of True: ClientDataSet1.IndexDefs.Add(Indice,Column.FieldName,[]); False: ClientDataSet1.IndexDefs.Add(Indice,Column.FieldName,[ixDescending]); end; ClientDataSet1.IndexName := Indice; end;
GOSTEI 0
Macario
21/11/2007
Olá bom dia.
Espero que este topico do nosso colega emerson_en ajude voces como me ajudou.
[url=http://forum.devmedia.com.br/viewtopic.php?t=53308&start=0&postdays=0&postorder=asc&highlight=ordemurl]Ordenar ClientDataset (IndexFieldNames) em ordem decrescente
[/url]
Abraço. 8)
Espero que este topico do nosso colega emerson_en ajude voces como me ajudou.
[url=http://forum.devmedia.com.br/viewtopic.php?t=53308&start=0&postdays=0&postorder=asc&highlight=ordemurl]Ordenar ClientDataset (IndexFieldNames) em ordem decrescente
[/url]
Abraço. 8)
GOSTEI 0
Fabiano Góes
21/11/2007
luciano.lirio e Macario,
valeu pela atenção, testei os dois códigos e serviram perfeitamente pra minha necessidade.
Obrigado !!!
valeu pela atenção, testei os dois códigos e serviram perfeitamente pra minha necessidade.
Obrigado !!!
GOSTEI 0