Fórum Problema com Agregado e Ordenação #290669

03/08/2005

0

Se alguém puder ajudar eu fico muito agradecido... O problema é o seguinte:

Tem um grid, onde a propriedade TitleClick está configurada com:
ClientDataSet.indexFieldNames := Column.FieldName

O ClientDataSet tem um campo agregado que soma os valores de um campo e exibe em um dbedit laaaaa embaixo.

Tudo funciona normalmente, até o momento que tenho q alterar o conteudo do commandtext do clientdataSet (sem alterar as colunas!) só adiciono mais algumas cláusulas no Where para selecionar o que eu quiser na query

Acontece que a partir desse momento o campo agregado começa a funcionar de forma incorreta quando é feita a ordenação das colunas do grid, ele fica acumulando todos os valores, cada vez que é ordenado.

Se alguém tiver alguma solução para esse problema eu agradeço desde já!


Luistuba

Luistuba

Responder

Posts

03/08/2005

Ivanh

tive que abandonar os aggregates :!:
fiz um componente para substituir os aggregates...


Responder

Gostei + 0

21/03/2006

Eselvati

Poderia me dar uma dica de como funciona este componente, pois tb vou ter q abandonar o bugmidas....






Ederson Selvati


Responder

Gostei + 0

14/04/2015

Mário Filho

Bom, Eu estava com o mesmo problema. No ontitleClick do dbgrid eu faço algumas ordenações e após muito sofre com essa questão do acumulo de valores nos campos agregados conegui um solução bem simples e rápida:
No término de sua indexação apenas coloque: nomedoseudataset.refresh. Veja no meu exemplo abaixo:

procedure DbGridTitleClick(Column: TColumn);
var
wnome: string;
begin
if assigned(oldcolumn2) then
oldcolumn2.title.color := dbgridPontos2.FixedColor;
wnome:=CdsPontos2.IndexName;
CdsPontos2.IndexDefs.Clear;
if copy(wnome,1,3)='des' then
begin
CdsPontos2.IndexDefs.add('asc_'+column.FieldName,column.FieldName,[]);
CdsPontos2.IndexName:='asc_'+column.FieldName;
column.Title.Color:= clCream;
end
else if (copy(wnome,1,3)='asc') or (copy(wnome,1,3)='') then
begin
CdsPontos2.IndexDefs.add('desc_'+column.FieldName,column.FieldName,[ixdescending]);
CdsPontos2.IndexName:='desc_'+column.FieldName;
column.Title.Color:= clGradientInactiveCaption;
end;
oldcolumn2:= column;

CdsPontos2.Refresh; // ESSA É ALINHA QUE TE INTERESSA !

end;

Boa sorte
Responder

Gostei + 0

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

Aceitar