добавлено: 29 ноя 12
понравилось:0
просмотров: 5719
комментов: 0
теги:
понравилось:0
просмотров: 5719
комментов: 0
теги:
Автор: X11
Как в TcxGrid отобразить количество записей в группе и просуммировать значение поля по группам?
Как реализовать такое, как на картинке?

Реализация содержится в справке.
Ссылка для справочной системы Delphi 2007:
ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/Example_TcxDataSummary_OnAfterSummary.htm
Как реализовать такое, как на картинке?

Реализация содержится в справке.
Ссылка для справочной системы Delphi 2007:
ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/Example_TcxDataSummary_OnAfterSummary.htm
procedure TForm1.Initialize; var ASummaryItem: TcxDataSummaryItem; begin //group by vendor DBTableView1VendorNo.GroupIndex := 0; DBTableView1VendorNo.Visible := False; with DBTableView1.DataController.Summary do begin BeginUpdate; try //set prefix and postfix for a group capion DefaultGroupSummaryItems.BeginText := '{'; DefaultGroupSummaryItems.EndText := '}'; //summary on ListPrice ASummaryItem := DefaultGroupSummaryItems.Add; ASummaryItem.Kind := skSum; ASummaryItem.ItemLink := DBTableView1ListPrice; ASummaryItem.Position := spFooter; //summary on Description ASummaryItem := DefaultGroupSummaryItems.Add; ASummaryItem.Kind := skCount; ASummaryItem.ItemLink := DBTableView1Description; ASummaryItem.Position := spFooter; //dummy summary on Description ASummaryItem := DefaultGroupSummaryItems.Add; ASummaryItem.Kind := skNone; ASummaryItem.ItemLink := DBTableView1Description; //subscribe to the OnAfterSummary event OnAfterSummary := MyAfterSummary; finally EndUpdate; end; end; end; procedure TForm1.MyAfterSummary(ASender: TcxDataSummary); var AChildDataGroupsCount: Integer; AChildDataGroupIndex, AParentDataGroupIndex: TcxDataGroupIndex; AChildPosition: Integer; begin //iterate through data groups at the level 0 AParentDataGroupIndex := -1; with DBTableView1.DataController.Groups do begin AChildDataGroupsCount := ChildCount[AParentDataGroupIndex]; for AChildPosition := 0 to AChildDataGroupsCount - 1 do begin //data group index of a child AChildDataGroupIndex := ChildDataGroupIndex[AParentDataGroupIndex, AChildPosition]; CalculateGroupAverage(AChildDataGroupIndex); end; end; end; procedure TForm1.CalculateGroupAverage(ADataGroupIndex: TcxDataGroupIndex); var AVarSum, AVarCount, AVarAverage: Variant; begin with DBTableView1.DataController.Summary do begin //get sum of prices for specific data group //the second argument identifies a summary index in the //TcxDataSummary.DefaultGroupSummaryItems collection AVarSum := GroupSummaryValues[ADataGroupIndex, 0]; //get records count in a group AVarCount := GroupSummaryValues[ADataGroupIndex, 1]; if not (VarIsNull(AVarSum) or VarIsNull(AVarCount)) then begin AVarAverage := AVarSum / AVarCount; GroupSummaryValues[ADataGroupIndex, 2] := Format('%m / %d = %m', [Double(AVarSum), Integer(AVarCount), Double(AVarAverage)]); end; end; end;
Комментарии