Problema com Agregado e Ordenação
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á!
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
Curtidas 0
Respostas
Ivanh
03/08/2005
tive que abandonar os aggregates :!:
fiz um componente para substituir os aggregates...
fiz um componente para substituir os aggregates...
GOSTEI 0
Eselvati
03/08/2005
Poderia me dar uma dica de como funciona este componente, pois tb vou ter q abandonar o bugmidas....
Ederson Selvati
Ederson Selvati
GOSTEI 0
Mário Filho
03/08/2005
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
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
GOSTEI 0