Здравствуйте!
В общем, я тут парил народ с вопросами на прошлых страницах с группировкой. ВСем спасибо за ответы!
Проблему я решил!!!
Решение выкладываю. Кому-то покажется элементарным, а кому-то, возможно, будет полезно!
Задача состояла вот в чем: необходимо было в cxgrid при проведении группировки , по нажатию на кнопку заменять исходный Summary – который считается в cxgrid на свой собственный. И рассчитывать его по каждой группе. К посту прикладываю пример, в котором данные группируются, а после щелчка по кнопке, программа считает по каждой группе среднее значение по столбцу 1 и умножает его для прикола на 100. Заметьте, что среднее я считаю сам, без всяких встроенных функций. Аналогично считаются и все прочие суммы разности и т.д. в т.ч. сколько раз встречается то или иное слово!!!
Надеюсь, кому-то это будет полезно. Так как сам просидел не один день!
Всем спасибо и удачи!
Ссылка на файл примера:
http://ifolder.ru/29416787 [more=Текст программы (если ссылка загнется)..]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters,
cxStyles, dxSkinsCore, dxSkinsDefaultPainters, dxSkinscxPCPainter,
cxCustomData, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, ADODB,
cxGridLevel, cxClasses, cxGridCustomView, cxGridCustomTableView,
cxGridTableView, cxGridDBTableView, cxGrid, StdCtrls;
type
TForm1 = class(TForm)
cxGrid1DBTableView1: TcxGridDBTableView;
cxGrid1Level1: TcxGridLevel;
cxGrid1: TcxGrid;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
cxGrid1DBTableView1DBColumn: TcxGridDBColumn;
cxGrid1DBTableView1Col1: TcxGridDBColumn;
cxGrid1DBTableView1Col2: TcxGridDBColumn;
cxGrid1DBTableView1Col3: TcxGridDBColumn;
cxGrid1DBTableView1Col4: TcxGridDBColumn;
cxGrid1DBTableView1Col5: TcxGridDBColumn;
cxGrid1DBTableView1Col6: TcxGridDBColumn;
cxGrid1DBTableView1Col7: TcxGridDBColumn;
cxGrid1DBTableView1Col8: TcxGridDBColumn;
cxGrid1DBTableView1Col9: TcxGridDBColumn;
cxGrid1DBTableView1Col10: TcxGridDBColumn;
cxGrid1DBTableView1Col11: TcxGridDBColumn;
cxGrid1DBTableView1Col12: TcxGridDBColumn;
cxGrid1DBTableView1Col13: TcxGridDBColumn;
cxGrid1DBTableView1Col14: TcxGridDBColumn;
cxGrid1DBTableView1Col15: TcxGridDBColumn;
cxGrid1DBTableView1Col16: TcxGridDBColumn;
cxGrid1DBTableView1Col17: TcxGridDBColumn;
cxGrid1DBTableView1Col18: TcxGridDBColumn;
cxGrid1DBTableView1Col19: TcxGridDBColumn;
cxGrid1DBTableView1Col20: TcxGridDBColumn;
cxGrid1DBTableView1Col21: TcxGridDBColumn;
cxGrid1DBTableView1Col22: TcxGridDBColumn;
cxGrid1DBTableView1Col23: TcxGridDBColumn;
cxGrid1DBTableView1Col24: TcxGridDBColumn;
cxGrid1DBTableView1Col25: TcxGridDBColumn;
cxGrid1DBTableView1Col26: TcxGridDBColumn;
cxGrid1DBTableView1Col27: TcxGridDBColumn;
cxGrid1DBTableView1Col28: TcxGridDBColumn;
cxGrid1DBTableView1Col29: TcxGridDBColumn;
cxGrid1DBTableView1Col30: TcxGridDBColumn;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
a:string;
Form1: TForm1;
function CalculateGroupAverage(ADataGroupIndex: TcxDataGroupIndex):Single ;
procedure MyAfterSummary;
implementation
{$R *.dfm}
procedure MyAfterSummary;
var
AChildDataGroupsCount: Integer;
AChildDataGroupIndex, AParentDataGroupIndex: TcxDataGroupIndex;
AChildPosition: Integer;
begin
AParentDataGroupIndex := -1;
with form1.cxGrid1DBTableView1.DataController.Groups do
begin
AChildDataGroupsCount := ChildCount[AParentDataGroupIndex];
for AChildPosition := 0 to AChildDataGroupsCount - 1 do
begin
AChildDataGroupIndex := ChildDataGroupIndex[AParentDataGroupIndex, AChildPosition];
form1.cxGrid1DBTableView1.DataController.Summary.GroupSummaryValues[AChildPosition,0]:='Считаем среднее и умножаем его на 100: '+floattostr (CalculateGroupAverage(AChildDataGroupIndex));
end;
end;
end;
function CalculateGroupAverage(ADataGroupIndex: TcxDataGroupIndex):Single ;
var
AList: TList;
AGroupIndex, I,K, AIndex: Integer;
S: integer ;
begin
AList := TList.Create;
AGroupIndex:=ADataGroupIndex;
form1.cxGrid1DBTableView1.DataController.Groups.LoadRecordIndexes(AList, AGroupIndex);
for I := 0 to AList.Count - 1 do
begin
S := strtoint(form1.cxGrid1DBTableView1.DataController.Values[integer(AList[i]),1]);
k:=K+S;
end;
Result:=100*K/(AList.Count)
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MyAfterSummary;
end;
end.
[/more]