Componentes.Terceros.DevExp.../internal/x.36/1/ExpressQuantumGrid 6/Demos/Delphi/SummaryMultiDemo/SummaryMultiDemoMain.pas
2008-09-04 11:31:51 +00:00

284 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;
tvOrdersQuantity: TcxGridDBColumn;
lbDescription: TLabel;
miSelectedRecordsOnly: TMenuItem;
miIgnoreNullValues: TMenuItem;
N1: TMenuItem;
miGroupFooters: TMenuItem;
miMultiSelect: TMenuItem;
miGroupFooterAlwaysShow: TMenuItem;
miGroupFooterNeverShow: TMenuItem;
miGroupFooterShowWhenExpand: TMenuItem;
cxGridPopupMenu1: TcxGridPopupMenu;
lvOrders: TcxGridLevel;
tvOrdersProductID: TcxGridDBColumn;
miUseOnAfterSummaryEvent: TMenuItem;
LookAndFeelController: TcxLookAndFeelController;
miMultipleSummariesInFooter: TMenuItem;
miMultipleSummariesInGroupFooters: TMenuItem;
N2: TMenuItem;
procedure miAboutClick(Sender: TObject);
procedure miExitClick(Sender: TObject);
procedure miSelectedRecordsOnlyClick(Sender: TObject);
procedure miIgnoreNullValuesClick(Sender: TObject);
procedure miMultiSelectClick(Sender: TObject);
procedure miGroupFootersClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure tvOrdersDataControllerSummaryAfterSummary(
ASender: TcxDataSummary);
procedure miUseOnAfterSummaryEventClick(Sender: TObject);
procedure tvOrdersDataControllerSummaryDefaultGroupSummaryItemsSummary(
ASender: TcxDataSummaryItems; Arguments: TcxSummaryEventArguments;
var OutArguments: TcxSummaryEventOutArguments);
procedure tvOrdersStylesGetFooterSummaryStyle(AView: TcxGridTableView;
ARow: TcxCustomGridRow; AColumn: TcxGridColumn;
AFooterGroupLevel: Integer; ASummaryItem: TcxDataSummaryItem;
var AStyle: TcxStyle);
procedure tvOrdersStylesGetGroupSummaryStyle(Sender: TcxGridTableView;
ARow: TcxGridGroupRow; AColumn: TcxGridColumn;
ASummaryItem: TcxDataSummaryItem; var AStyle: TcxStyle);
procedure miMultipleSummariesInFooterClick(Sender: TObject);
procedure miMultipleSummariesInGroupFootersClick(Sender: TObject);
protected
procedure UpdateMenu;
public
{ Public declarations }
end;
var
SummaryMultiDemoMainForm: TSummaryMultiDemoMainForm;
implementation
{$R *.dfm}
uses
SummaryMultiDemoData, AboutDemoForm;
procedure TSummaryMultiDemoMainForm.UpdateMenu;
begin
miSelectedRecordsOnly.Checked := soSelectedRecords in tvOrders.DataController.Summary.Options;
miIgnoreNullValues.Checked := soNullIgnore in tvOrders.DataController.Summary.Options;
miUseOnAfterSummaryEvent.Checked := Assigned(tvOrders.DataController.Summary.OnAfterSummary);
miGroupFooters[Ord(tvOrders.OptionsView.GroupFooters)].Checked := True;
miMultipleSummariesInFooter.Checked := tvOrders.OptionsView.FooterMultiSummaries;
miMultipleSummariesInGroupFooters.Checked := tvOrders.OptionsView.GroupFooterMultiSummaries;
miMultiSelect.Checked := tvOrders.OptionsSelection.MultiSelect;
end;
procedure TSummaryMultiDemoMainForm.miAboutClick(Sender: TObject);
begin
ShowAboutDemoForm;
end;
procedure TSummaryMultiDemoMainForm.miExitClick(Sender: TObject);
begin
Close;
end;
procedure TSummaryMultiDemoMainForm.miSelectedRecordsOnlyClick(Sender: TObject);
begin
with tvOrders.DataController.Summary do
if soSelectedRecords in Options then
Options := Options - [soSelectedRecords]
else
Options := Options + [soSelectedRecords];
UpdateMenu;
end;
procedure TSummaryMultiDemoMainForm.miIgnoreNullValuesClick(Sender: TObject);
begin
with tvOrders.DataController.Summary do
if soNullIgnore in Options then
Options := Options - [soNullIgnore]
else
Options := Options + [soNullIgnore];
UpdateMenu;
end;
procedure TSummaryMultiDemoMainForm.miMultipleSummariesInFooterClick(
Sender: TObject);
begin
with tvOrders.OptionsView do
FooterMultiSummaries := not FooterMultiSummaries;
UpdateMenu;
end;
procedure TSummaryMultiDemoMainForm.miMultipleSummariesInGroupFootersClick(
Sender: TObject);
begin
with tvOrders.OptionsView do
GroupFooterMultiSummaries := not GroupFooterMultiSummaries;
UpdateMenu;
end;
procedure TSummaryMultiDemoMainForm.miMultiSelectClick(Sender: TObject);
begin
with tvOrders.OptionsSelection do
MultiSelect := not MultiSelect;
UpdateMenu;
end;
procedure TSummaryMultiDemoMainForm.miGroupFootersClick(Sender: TObject);
begin
tvOrders.OptionsView.GroupFooters := TcxGridGroupFootersMode(TMenuItem(Sender).MenuIndex);
UpdateMenu;
end;
procedure TSummaryMultiDemoMainForm.tvOrdersStylesGetFooterSummaryStyle(
AView: TcxGridTableView; ARow: TcxCustomGridRow; AColumn: TcxGridColumn;
AFooterGroupLevel: Integer; ASummaryItem: TcxDataSummaryItem;
var AStyle: TcxStyle);
begin
case ASummaryItem.Kind of
skMin:
AStyle := SummaryMultiDemoDataDM.styleRed;
skMax:
AStyle := SummaryMultiDemoDataDM.styleBlue;
end;
end;
procedure TSummaryMultiDemoMainForm.tvOrdersStylesGetGroupSummaryStyle(
Sender: TcxGridTableView; ARow: TcxGridGroupRow; AColumn: TcxGridColumn;
ASummaryItem: TcxDataSummaryItem; var AStyle: TcxStyle);
begin
if ASummaryItem <> nil then
tvOrdersStylesGetFooterSummaryStyle(Sender, ARow, AColumn, ARow.Level, ASummaryItem, AStyle);
end;
procedure TSummaryMultiDemoMainForm.FormShow(Sender: TObject);
begin
tvOrders.DataController.Groups.ChangeExpanding(0, True, False);
tvOrders.DataController.GotoFirst;
UpdateMenu;
end;
procedure TSummaryMultiDemoMainForm.miUseOnAfterSummaryEventClick(Sender: TObject);
var
ASummary: TcxDataSummary;
begin
ASummary := tvOrders.DataController.Summary;
ASummary.BeginUpdate;
try
if Assigned(ASummary.OnAfterSummary) then
ASummary.OnAfterSummary := nil
else
ASummary.OnAfterSummary := tvOrdersDataControllerSummaryAfterSummary;
finally
ASummary.EndUpdate;
end;
UpdateMenu;
end;
procedure TSummaryMultiDemoMainForm.tvOrdersDataControllerSummaryAfterSummary(
ASender: TcxDataSummary);
function CalculateFooterSummaryValue(AIndex: Integer; AKind: TcxSummaryKind): Variant;
var
AGroups: TcxDataControllerGroups;
I: Integer;
AValue: Variant;
begin
AGroups := tvOrders.DataController.Groups;
if AKind = skCount then
Result := AGroups.ChildCount[-1]
else
begin
Result := Null;
for I := 0 to AGroups.ChildCount[-1] - 1 do
begin;
AValue := ASender.GroupSummaryValues[AGroups.ChildDataGroupIndex[-1, I], AIndex];
if not VarIsNull(AValue) then
if VarIsNull(Result) then
Result := AValue
else
case AKind of
skMin:
if AValue < Result then
Result := AValue;
skMax:
if AValue > Result then
Result := AValue;
skSum, skAverage:
Result := Result + AValue;
end;
end;
if (AKind = skAverage) and not VarIsNull(Result) and (AGroups.ChildCount[-1] <> 0) then
Result := Result / AGroups.ChildCount[-1];
end;
end;
var
AFooterSummaryItems: TcxDataFooterSummaryItems;
AGroupSummaryItems: TcxDataGroupSummaryItems;
I: Integer;
AGroupSummaryItem: TcxDataSummaryItem;
AValue: Variant;
begin // calculate footer summaries using the group footer summary values, not actual data values
if tvOrders.GroupedColumnCount = 0 then Exit;
AFooterSummaryItems := ASender.FooterSummaryItems;
AGroupSummaryItems := ASender.GroupSummaryItems[0];
for I := 0 to AFooterSummaryItems.Count - 1 do
begin
AGroupSummaryItem := AGroupSummaryItems.GetDataItem(
(AFooterSummaryItems[I].ItemLink as TcxGridColumn).Index, spFooter);
if AGroupSummaryItem <> nil then
begin
AValue := CalculateFooterSummaryValue(AGroupSummaryItem.Index, AFooterSummaryItems[I].Kind);
if not VarIsNull(AValue) then
ASender.FooterSummaryValues[I] := VarAsType(AValue, VarType(ASender.FooterSummaryValues[I]));
end;
end;
end;
procedure TSummaryMultiDemoMainForm.tvOrdersDataControllerSummaryDefaultGroupSummaryItemsSummary(
ASender: TcxDataSummaryItems; Arguments: TcxSummaryEventArguments;
var OutArguments: TcxSummaryEventOutArguments);
var
AItem: TcxDataSummaryItem;
AValue: Variant;
begin // calculate the number of orders with the PaymentAmount > $300,000
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) and (VarAsType(AValue, varInteger) <= 300000) then
Dec(OutArguments.CountValue);
end;
end;
end.