git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@7 05c56307-c608-d34a-929d-697000501d7a
297 lines
9.6 KiB
ObjectPascal
297 lines
9.6 KiB
ObjectPascal
unit SummaryMultiDemoMain;
|
|
|
|
{$I ..\..\cxVer.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF DELPHI6}
|
|
Variants,
|
|
{$ENDIF}
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
|
|
Dialogs, StdCtrls, cxGridLevel, cxGridCustomTableView, cxGridTableView,
|
|
cxGridDBTableView, cxControls, cxGridCustomView, cxGrid, cxCustomData,
|
|
ExtCtrls, ActnList, ImgList, Menus, ComCtrls, cxGridCustomPopupMenu,
|
|
cxGridPopupMenu, ToolWin, cxStyles, cxGraphics, cxFilter, cxData, cxEdit,
|
|
DB, cxDBData, cxClasses, cxDataStorage, cxDBLookupComboBox, cxCalendar,
|
|
cxImageComboBox, cxCalc, cxBlobEdit, cxSpinEdit, cxLookAndFeels;
|
|
|
|
type
|
|
TSummaryMultiDemoMainForm = class(TForm)
|
|
mmMain: TMainMenu;
|
|
miAbout: TMenuItem;
|
|
miFile: TMenuItem;
|
|
miOptions: TMenuItem;
|
|
miExit: TMenuItem;
|
|
miSummaries: TMenuItem;
|
|
sbMain: TStatusBar;
|
|
Grid: TcxGrid;
|
|
tvOrders: TcxGridDBTableView;
|
|
tvOrdersCustomerID: TcxGridDBColumn;
|
|
tvOrdersPurchaseDate: TcxGridDBColumn;
|
|
tvOrdersPaymentType: TcxGridDBColumn;
|
|
tvOrdersPaymentAmount: TcxGridDBColumn;
|
|
tvOrdersDescription: TcxGridDBColumn;
|
|
tvOrdersQuantity: TcxGridDBColumn;
|
|
lbDescription: TLabel;
|
|
miSelectedRecordOnly: TMenuItem;
|
|
miIgnoreNullValues: TMenuItem;
|
|
N1: TMenuItem;
|
|
miGroupFooter: TMenuItem;
|
|
miMultiSelect: TMenuItem;
|
|
miGroupFooterAlwaysShow: TMenuItem;
|
|
miGroupFooterNeverShow: TMenuItem;
|
|
miGroupFooterShowWhenExpand: TMenuItem;
|
|
cxGridPopupMenu1: TcxGridPopupMenu;
|
|
lvOrders: TcxGridLevel;
|
|
tvOrdersProductID: TcxGridDBColumn;
|
|
tvOrdersPurchaseMonth: TcxGridDBColumn;
|
|
miUseOnAfterSummaryEvent: TMenuItem;
|
|
LookAndFeelController: TcxLookAndFeelController;
|
|
procedure miAboutClick(Sender: TObject);
|
|
procedure miExitClick(Sender: TObject);
|
|
procedure miSelectedRecordsOnlyClick(Sender: TObject);
|
|
procedure miIgnoreNullValuesClick(Sender: TObject);
|
|
procedure miMultiSelectClick(Sender: TObject);
|
|
procedure GridFocusedViewChanged(Sender: TcxCustomGrid;
|
|
APrevFocusedView, AFocusedView: TcxCustomGridView);
|
|
procedure miGroupFooterShowClick(Sender: TObject);
|
|
procedure tvOrdersStylesGetGroupStyle(Sender: TcxGridTableView;
|
|
ARecord: TcxCustomGridRecord; ALevel: Integer; out AStyle: TcxStyle);
|
|
procedure FormShow(Sender: TObject);
|
|
procedure tvOrdersDataControllerSummaryAfterSummary(
|
|
ASender: TcxDataSummary);
|
|
procedure miUseOnAfterSummaryEventClick(Sender: TObject);
|
|
procedure tvOrdersDataControllerSummaryDefaultGroupSummaryItemsSummary(
|
|
ASender: TcxDataSummaryItems; Arguments: TcxSummaryEventArguments;
|
|
var OutArguments: TcxSummaryEventOutArguments);
|
|
public
|
|
{ Public declarations }
|
|
end;
|
|
|
|
var
|
|
SummaryMultiDemoMainForm: TSummaryMultiDemoMainForm;
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
uses
|
|
SummaryMultiDemoData, AboutDemoForm;
|
|
|
|
procedure TSummaryMultiDemoMainForm.miAboutClick(Sender: TObject);
|
|
begin
|
|
ShowAboutDemoForm;
|
|
end;
|
|
|
|
procedure TSummaryMultiDemoMainForm.miExitClick(Sender: TObject);
|
|
begin
|
|
Close;
|
|
end;
|
|
|
|
procedure TSummaryMultiDemoMainForm.miSelectedRecordsOnlyClick(
|
|
Sender: TObject);
|
|
var
|
|
ASummary: TcxDataSummary;
|
|
begin
|
|
with Sender as TMenuItem do
|
|
Checked := not Checked;
|
|
ASummary := Grid.FocusedView.DataController.Summary;
|
|
if (Sender as TMenuItem).Checked then
|
|
ASummary.Options := ASummary.Options + [soSelectedRecords]
|
|
else
|
|
ASummary.Options := ASummary.Options - [soSelectedRecords];
|
|
end;
|
|
|
|
procedure TSummaryMultiDemoMainForm.miIgnoreNullValuesClick(
|
|
Sender: TObject);
|
|
var
|
|
ASummary: TcxDataSummary;
|
|
begin
|
|
with Sender as TMenuItem do
|
|
Checked := not Checked;
|
|
ASummary := Grid.FocusedView.DataController.Summary;
|
|
if (Sender as TMenuItem).Checked then
|
|
ASummary.Options := ASummary.Options + [soNullIgnore]
|
|
else
|
|
ASummary.Options := ASummary.Options - [soNullIgnore];
|
|
end;
|
|
|
|
procedure TSummaryMultiDemoMainForm.miMultiSelectClick(
|
|
Sender: TObject);
|
|
var
|
|
AView: TcxGridDBTableView;
|
|
begin
|
|
with Sender as TMenuItem do
|
|
Checked := not Checked;
|
|
AView := TcxGridDBTableView(Grid.FocusedView);
|
|
AView.OptionsSelection.MultiSelect := (Sender as TMenuItem).Checked;
|
|
end;
|
|
|
|
procedure TSummaryMultiDemoMainForm.GridFocusedViewChanged(
|
|
Sender: TcxCustomGrid; APrevFocusedView,
|
|
AFocusedView: TcxCustomGridView);
|
|
var
|
|
AView: TcxGridDBTableView;
|
|
begin
|
|
AView := TcxGridDBTableView(Grid.FocusedView);
|
|
miSelectedRecordOnly.Checked := soSelectedRecords in
|
|
AView.DataController.Summary.Options;
|
|
miIgnoreNullValues.Checked := soNullIgnore in
|
|
AView.DataController.Summary.Options;
|
|
miMultiSelect.Checked := AView.OptionsSelection.MultiSelect;
|
|
miGroupFooterAlwaysShow.Checked :=
|
|
AView.OptionsView.GroupFooters = gfAlwaysVisible;
|
|
miGroupFooterNeverShow.Checked :=
|
|
AView.OptionsView.GroupFooters = gfInvisible;
|
|
miGroupFooterShowWhenExpand.Checked :=
|
|
AView.OptionsView.GroupFooters = gfVisibleWhenExpanded;
|
|
end;
|
|
|
|
procedure TSummaryMultiDemoMainForm.miGroupFooterShowClick(
|
|
Sender: TObject);
|
|
var
|
|
AView: TcxGridDBTableView;
|
|
begin
|
|
(Sender as TMenuItem).Checked := True;
|
|
AView := TcxGridDBTableView(Grid.FocusedView);
|
|
AView.OptionsView.GroupFooters :=
|
|
TcxGridGroupFootersMode(Byte((Sender as TMenuItem).Tag));
|
|
end;
|
|
|
|
procedure TSummaryMultiDemoMainForm.tvOrdersStylesGetGroupStyle(
|
|
Sender: TcxGridTableView; ARecord: TcxCustomGridRecord; ALevel: Integer;
|
|
out AStyle: TcxStyle);
|
|
begin
|
|
if (ALevel mod 2) = 0 then
|
|
AStyle := SummaryMultiDemoDataDM.stGreyLight
|
|
else
|
|
AStyle := SummaryMultiDemoDataDM.stBlueSky;
|
|
end;
|
|
|
|
procedure TSummaryMultiDemoMainForm.FormShow(Sender: TObject);
|
|
begin
|
|
if SummaryMultiDemoDataDM.tblOrders.Active then
|
|
begin
|
|
tvOrders.DataController.Groups.FullCollapse;
|
|
tvOrders.DataController.Groups.ChangeExpanding(0, False, False);
|
|
tvOrders.DataController.GotoFirst;
|
|
end;
|
|
tvOrders.DataController.Summary.BeginUpdate;
|
|
tvOrders.DataController.Summary.DefaultGroupSummaryItems.OnSummary :=
|
|
tvOrdersDataControllerSummaryDefaultGroupSummaryItemsSummary;
|
|
tvOrders.DataController.Summary.EndUpdate;
|
|
end;
|
|
|
|
procedure TSummaryMultiDemoMainForm.miUseOnAfterSummaryEventClick(
|
|
Sender: TObject);
|
|
var
|
|
ASummary: TcxDataSummary;
|
|
begin
|
|
with Sender as TMenuItem do
|
|
Checked := not Checked;
|
|
ASummary := tvOrders.DataController.Summary;
|
|
ASummary.BeginUpdate;
|
|
try
|
|
if (Sender as TMenuItem).Checked then
|
|
ASummary.OnAfterSummary := tvOrdersDataControllerSummaryAfterSummary
|
|
else
|
|
ASummary.OnAfterSummary := nil;
|
|
finally
|
|
ASummary.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
procedure TSummaryMultiDemoMainForm.tvOrdersDataControllerSummaryAfterSummary(
|
|
ASender: TcxDataSummary);
|
|
var
|
|
AGroups: TcxDataControllerGroups;
|
|
ASummary: TcxDataSummary;
|
|
AGroupSummaryItems: TcxDataGroupSummaryItems;
|
|
AFooterSummaryItems: TcxDataFooterSummaryItems;
|
|
AVarType: Integer;
|
|
AValue: Variant;
|
|
I,J: Integer;
|
|
|
|
function GetFooterSummaryValues(AIndex: Integer; AKind: TcxSummaryKind): Variant;
|
|
var
|
|
K: Integer;
|
|
AValue: Variant;
|
|
begin
|
|
if AKind <> skCount then
|
|
begin
|
|
Result :=
|
|
ASummary.GroupSummaryValues[AGroups.ChildDataGroupIndex[-1, 0], AIndex];
|
|
for K := 1 to AGroups.ChildCount[-1] - 1 do
|
|
begin;
|
|
AValue :=
|
|
ASummary.GroupSummaryValues[AGroups.ChildDataGroupIndex[-1, K], AIndex];
|
|
if VarIsNull(Result) and not VarIsNull(AValue) then
|
|
begin
|
|
Result := AValue;
|
|
Continue;
|
|
end;
|
|
if not VarIsNull(AValue) then
|
|
case AKind of
|
|
skMin:
|
|
if Result > AValue then
|
|
Result := AValue;
|
|
skMax:
|
|
if Result < AValue then
|
|
Result := AValue;
|
|
skSum,skAverage:
|
|
Result := Result + AValue;
|
|
end;
|
|
end;
|
|
if (AKind = skAverage) and (AGroups.ChildCount[-1]>0) and
|
|
(not VarIsNull(Result)) then
|
|
Result := Result/(AGroups.ChildCount[-1]);
|
|
end
|
|
else
|
|
Result := AGroups.ChildCount[-1];
|
|
end;
|
|
|
|
begin
|
|
AGroups := tvOrders.DataController.Groups;
|
|
if AGroups.GroupingItemCount > 0 then
|
|
begin
|
|
ASummary := tvOrders.DataController.Summary;
|
|
AGroupSummaryItems := ASummary.GroupSummaryItems[0];
|
|
AFooterSummaryItems := ASummary.FooterSummaryItems;
|
|
for I := 0 to AFooterSummaryItems.Count - 1 do
|
|
begin
|
|
AVarType := VarType(ASummary.FooterSummaryValues[I]);
|
|
ASummary.FooterSummaryValues[I] := Null;
|
|
for J := 0 to AGroupSummaryItems.Count - 1 do
|
|
if (AFooterSummaryItems[I].ItemLink = AGroupSummaryItems[J].ItemLink) and
|
|
(AGroupSummaryItems[J].Position = spFooter) then
|
|
begin
|
|
AValue := GetFooterSummaryValues(J,AFooterSummaryItems[I].Kind);
|
|
if not VarIsNull(AValue) then
|
|
ASummary.FooterSummaryValues[I] := VarAsType(AValue, AVarType);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TSummaryMultiDemoMainForm.tvOrdersDataControllerSummaryDefaultGroupSummaryItemsSummary(
|
|
ASender: TcxDataSummaryItems; Arguments: TcxSummaryEventArguments;
|
|
var OutArguments: TcxSummaryEventOutArguments);
|
|
var
|
|
AValue: Variant;
|
|
AItem: TcxDataSummaryItem;
|
|
begin
|
|
AItem := Arguments.SummaryItem;
|
|
if (AItem.ItemLink = tvOrdersProductID) and
|
|
(AItem.Kind = skCount) and (AItem.Position = spGroup) then
|
|
begin
|
|
AValue := tvOrders.DataController.Values[
|
|
Arguments.RecordIndex, tvOrdersPaymentAmount.Index];
|
|
if not VarIsNull(AValue) then
|
|
if VarAsType(AValue, varInteger) <= 300000 then
|
|
Dec(OutArguments.CountValue);
|
|
end;
|
|
end;
|
|
|
|
end.
|