GARANTIR DESCONTO

Fórum ClientDataset #349363

21/11/2007

0

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


Felipeiw

Felipeiw

Responder

Posts

21/11/2007

Luciano.lirio

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


Responder

Gostei + 0

22/11/2007

Fabiano Góes

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 ?


Responder

Gostei + 0

22/11/2007

Fabiano Góes

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:
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.


Responder

Gostei + 0

22/11/2007

Luciano.lirio

felipeiw e Fabiano Góes

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;




Responder

Gostei + 0

22/11/2007

Luciano.lirio

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]

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;
[b:9df6fcef9a][/b:9df6fcef9a]


Responder

Gostei + 0

22/11/2007

Macario

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)


Responder

Gostei + 0

22/11/2007

Fabiano Góes

luciano.lirio e Macario,

valeu pela atenção, testei os dois códigos e serviram perfeitamente pra minha necessidade.

Obrigado !!!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar