Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ilano

DevExpress - Criando sumário em tempo de execução

Recommended Posts

Olá pessoal,

 

Alguém pode me dizer o que está faltando neste código? Pois está dando erro na linha em vermelho.

Estou usando Delphi 7 e o componente é DevExpress.

 

procedure TFrmScriptSQL.SpeedButton1Click(Sender: TObject);

Var

GridColumn : TdxDBTreeListColumn;

SummaryItems : TdxDBGridSummaryItems;

NewSummaryItem : TdxDBGridSummaryItem;

 

I : Integer;

begin

I:=ListBox2.ItemIndex;

if not dxDBGrid3.IsGridMode then

begin

GridColumn := dxDBGrid3.ColumnByName('dxDBGrid1Event_Date');

if GridColumn.SummaryGroup <> nil then

 

begin

 

SummaryItems := GridColumn.SummaryGroup.SummaryItems;

 

NewSummaryItem := SummaryItems.Add;

 

NewSummaryItem.ColumnName := '_dxColumna' + IntToStr(ListBox2.ItemIndex);

NewSummaryItem.SummaryField := ListBox2.Items.Strings;

NewSummaryItem.SummaryFormat := TxtFormato1.Text;

 

If rgCabecalho.ItemIndex = 0 Then

NewSummaryItem.SummaryType := cstNone

Else

If rgCabecalho.ItemIndex = 1 Then

NewSummaryItem.SummaryType := cstSum

Else

If rgCabecalho.ItemIndex = 2 Then

NewSummaryItem.SummaryType := cstMin

Else

If rgCabecalho.ItemIndex = 2 Then

NewSummaryItem.SummaryType := cstMax

Else

If rgCabecalho.ItemIndex = 3 Then

NewSummaryItem.SummaryType := cstMax

Else

If rgCabecalho.ItemIndex = 4 Then

NewSummaryItem.SummaryType := cstCount

Else

If rgCabecalho.ItemIndex = 4 Then

NewSummaryItem.SummaryType := cstAvg;

 

dxDBGrid1.RefreshGroupColumns;

end;

end;

 

dxDBGrid3.ShowSummaryFooter;

 

end;

 

Grato,

 

Ilano.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal,

 

Bem, consegui fazer até certo ponto, contudo não estou conseguindo apontar para as propriedades destacadas em vermelho. Por enquanto, o meu código está assim:

 

procedure TFrmScriptSQL.BtnAplicar1Click(Sender: TObject);

Var

Campo, ColunaName, GrupoName : String;

Col, Grupo, Item : Integer;

begin

dxDBGrid3.ShowSummaryFooter:=True;

Col:=ListBox2.ItemIndex;

Campo:=ListBox2.Items.Strings[Col];

If dxDBGrid3.SummaryGroups.Count = 0 Then dxDBGrid3.SummaryGroups.Add;

Grupo:=dxDBGrid3.SummaryGroups.Count - 1;

 

dxDBGrid3.SummaryGroups[Grupo].SummaryItems.Add;

Item:=dxDBGrid3.SummaryGroups[Grupo].SummaryItems.Count - 1;

dxDBGrid3.SummaryGroups[Grupo].SummaryItems[item].GetSummaryItems.Add;

 

ColunaName:=ListBox3.Items.Strings[Col];

 

dxDBGrid3.SummaryGroups[Grupo].SummaryItems[item].ColumnName:=ColunaName;

dxDBGrid3.SummaryGroups[Grupo].SummaryItems[item].SummaryFormat:=TxtFormato1.Text;

dxDBGrid3.SummaryGroups[Grupo].SummaryItems[item].SummaryField:=Campo;

GrupoName:=dxDBGrid3.SummaryGroups[Grupo].Name;

 

If rgCabecalho.ItemIndex = 0 Then

Begin

dxDBGrid3.SummaryGroups[Grupo].SummaryItems[item].SummaryType:=cstNone;

dxDBGrid3.Columns[Col].SummaryFooterType:=cstNone;

End

Else

If rgCabecalho.ItemIndex = 1 Then

Begin

dxDBGrid3.SummaryGroups[Grupo].SummaryItems[item].SummaryType:=cstSum;

dxDBGrid3.Columns[Col].SummaryFooterType:=cstSum;

End

Else

If rgCabecalho.ItemIndex = 1 Then

Begin

dxDBGrid3.SummaryGroups[Grupo].SummaryItems[item].SummaryType:=cstMin;

dxDBGrid3.Columns[Col].SummaryFooterType:=cstMin;

End

Else

If rgCabecalho.ItemIndex = 2 Then

Begin

dxDBGrid3.SummaryGroups[Grupo].SummaryItems[item].SummaryType:=cstMax;

dxDBGrid3.Columns[Col].SummaryFooterType:=cstMax;

End

Else

If rgCabecalho.ItemIndex = 3 Then

Begin

dxDBGrid3.SummaryGroups[Grupo].SummaryItems[item].SummaryType:=cstCount;

dxDBGrid3.Columns[Col].SummaryFooterType:=cstCount;

End

Else

If rgCabecalho.ItemIndex = 3 Then

Begin

dxDBGrid3.SummaryGroups[Grupo].SummaryItems[item].SummaryType:=cstAvg;

dxDBGrid3.Columns[Col].SummaryFooterType:=cstAvg;

End;

 

dxDBGrid3.Columns[Col].SummaryFooterField:=Campo;

dxDBGrid3.Columns[Col].SummaryFooterFormat:=TxtFormato1.Text;

 

 

//O erro está acontecendo nesta três últimas linhas:

dxDBGrid3.GroupColumns[Grupo].SummaryField:=Campo;

dxDBGrid3.GroupColumns[Grupo].SummaryFormat:=TxtFormato1.Text;

dxDBGrid3.GroupColumns[Grupo].Name:=GrupoName;

 

end;

 

A mensagem de erro é:

 

List index out bounds(0)

 

Alguém poderia me dar uma luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não trabalho com dbExpress e nunca usei o SummaryGroup em outros componentes, portanto não posso te passar uma dica direta, mas posso sugerir que você verifique o resultado desta atribuição:

Grupo:=dxDBGrid3.SummaryGroups.Count - 1;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá bdexterholland,

 

Agradço muito sua atenção. Bom, estou usando aquela atribuição pq como estou fazendo com que o usuário abra ou crie novas consultas as colunas do dxDBGrid seráo removidas e recriadas, assim, ao montar os Sumários vejo se existem Grupos por isso o COUNT, se houver pego o último índice pois não sei quantos e quais grupos já tem criado, por isso o Grupo:=dxDBGrid3.SummaryGroups.Count - 1;

Até agora, está tudo indo direitinho, só que estão faltando aquelas últimas implementações para que o componente possa mostrar a soma correta da coluna, pois no momento só está me retornando ZERO.

 

dxDBGrid3.GroupColumns[Grupo].SummaryField:=Campo;

dxDBGrid3.GroupColumns[Grupo].SummaryFormat:=TxtFormato1.Text;

dxDBGrid3.GroupColumns[Grupo].Name:=GrupoName;

 

Mais alguém tem outra sugestão? :cry:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.