Componentes.Terceros.DevExp.../internal/x.36/1/ExpressQuantumGrid 6/Demos/CBuilder/SummaryMultiDemo/SummaryMultiDemoMain.cpp

248 lines
9.3 KiB
C++
Raw Normal View History

//---------------------------------------------------------------------------
#include <vcl.h>
#include "shellapi.hpp"
#pragma hdrstop
#include "SummaryMultiDemoMain.h"
#include "SummaryMultiDemoData.h"
#include "AboutDemoForm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "cxClasses"
#pragma link "cxControls"
#pragma link "cxCustomData"
#pragma link "cxData"
#pragma link "cxDBData"
#pragma link "cxEdit"
#pragma link "cxFilter"
#pragma link "cxGraphics"
#pragma link "cxGrid"
#pragma link "cxGridCustomTableView"
#pragma link "cxGridCustomView"
#pragma link "cxGridDBTableView"
#pragma link "cxGridLevel"
#pragma link "cxGridTableView"
#pragma link "cxStyles"
#pragma link "cxGridCustomPopupMenu"
#pragma link "cxGridPopupMenu"
#pragma link "cxLookAndFeels"
#pragma link "cxBlobEdit"
#pragma link "cxCalc"
#pragma link "cxCalendar"
#pragma link "cxDataStorage"
#pragma link "cxDBLookupComboBox"
#pragma link "cxImageComboBox"
#pragma link "cxSpinEdit"
#pragma resource "*.dfm"
TSummaryMultiDemoMainForm *SummaryMultiDemoMainForm;
//---------------------------------------------------------------------------
__fastcall TSummaryMultiDemoMainForm::TSummaryMultiDemoMainForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void TSummaryMultiDemoMainForm::UpdateMenu()
{
miSelectedRecordsOnly->Checked = tvOrders->DataController->Summary->Options.Contains(soSelectedRecords);
miIgnoreNullValues->Checked = tvOrders->DataController->Summary->Options.Contains(soNullIgnore);
miUseOnAfterSummaryEvent->Checked = tvOrders->DataController->Summary->OnAfterSummary != NULL;
miGroupFooters->Items[(int)tvOrders->OptionsView->GroupFooters]->Checked = true;
miMultipleSummariesInFooter->Checked = tvOrders->OptionsView->FooterMultiSummaries;
miMultipleSummariesInGroupFooters->Checked = tvOrders->OptionsView->GroupFooterMultiSummaries;
miMultiSelect->Checked = tvOrders->OptionsSelection->MultiSelect;
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::miAboutClick(TObject *Sender)
{
ShowAboutDemoForm();
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::miExitClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::FormShow(TObject *Sender)
{
tvOrders->DataController->Groups->ChangeExpanding(0, true, false);
tvOrders->DataController->GotoFirst();
UpdateMenu();
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::miSelectedRecordsOnlyClick(
TObject *Sender)
{
TcxDataSummary* ASummary = tvOrders->DataController->Summary;
if (ASummary->Options.Contains(soSelectedRecords))
ASummary->Options = ASummary->Options >> soSelectedRecords;
else
ASummary->Options = ASummary->Options << soSelectedRecords;
UpdateMenu();
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::miIgnoreNullValuesClick(
TObject *Sender)
{
TcxDataSummary* ASummary = tvOrders->DataController->Summary;
if (ASummary->Options.Contains(soNullIgnore))
ASummary->Options = ASummary->Options >> soNullIgnore;
else
ASummary->Options = ASummary->Options << soNullIgnore;
UpdateMenu();
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::miMultiSelectClick(
TObject *Sender)
{
tvOrders->OptionsSelection->MultiSelect = !tvOrders->OptionsSelection->MultiSelect;
UpdateMenu();
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::miUseOnAfterSummaryEventClick(TObject *Sender)
{
TcxDataSummary* ASummary = tvOrders->DataController->Summary;
ASummary->BeginUpdate();
try {
if (ASummary->OnAfterSummary == NULL)
ASummary->OnAfterSummary = tvOrdersDataControllerSummaryAfterSummary;
else
ASummary->OnAfterSummary = NULL;
}
__finally {
ASummary->EndUpdate();
}
UpdateMenu();
}
//---------------------------------------------------------------------------
Variant TSummaryMultiDemoMainForm::CalculateFooterSummaryValue(int AIndex, TcxSummaryKind AKind)
{
TcxDataControllerGroups* AGroups = tvOrders->DataController->Groups;
Variant Result;
Variant AValue;
if (AKind == skCount)
Result = AGroups->ChildCount[-1];
else {
Result = VarAsType(Result, varNull);
for (int i = 0; i < AGroups->ChildCount[-1]; i++) {
AValue = tvOrders->DataController->Summary->GroupSummaryValues[AGroups->ChildDataGroupIndex[-1][i]][AIndex];
if (!VarIsNull(AValue))
if (VarIsNull(Result))
Result = AValue;
else
switch (AKind) {
case skMin:
if (AValue < Result)
Result = AValue;
break;
case skMax:
if (AValue > Result)
Result = AValue;
break;
case skSum:
case skAverage:
Result += AValue;
break;
};
}
if ((AKind == skAverage) && !VarIsNull(Result) && (AGroups->ChildCount[-1] != 0))
Result /= AGroups->ChildCount[-1];
}
return Result;
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::tvOrdersDataControllerSummaryAfterSummary(
TcxDataSummary* ASender)
{ // calculate footer summaries using the group footer summary values, not actual data values
if (tvOrders->GroupedColumnCount == 0) return;
TcxDataFooterSummaryItems* AFooterSummaryItems = ASender->FooterSummaryItems;
TcxDataGroupSummaryItems* AGroupSummaryItems = ASender->GroupSummaryItems[0];
for (int i = 0; i < AFooterSummaryItems->Count; i++) {
TcxDataSummaryItem* AGroupSummaryItem = AGroupSummaryItems->GetDataItem(
((TcxGridColumn*)AFooterSummaryItems->Items[i]->ItemLink)->Index, spFooter, false, skNone);
if (AGroupSummaryItem != NULL) {
Variant AValue = CalculateFooterSummaryValue(AGroupSummaryItem->Index, AFooterSummaryItems->Items[i]->Kind);
if (!VarIsNull(AValue))
ASender->FooterSummaryValues[i] = VarAsType(AValue, VarType(ASender->FooterSummaryValues[i]));
}
}
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::tvOrdersDataControllerSummaryDefaultGroupSummaryItemsSummary(
TcxDataSummaryItems *ASender, const TcxSummaryEventArguments &Arguments,
TcxSummaryEventOutArguments &OutArguments)
{ // calculate the number of orders with the PaymentAmount > $300,000
TcxDataSummaryItem* AItem = Arguments.SummaryItem;
if ((AItem->ItemLink == tvOrdersProductID) &&
(AItem->Kind == skCount) && (AItem->Position == spGroup)) {
Variant AValue = tvOrders->DataController->Values[Arguments.RecordIndex][tvOrdersPaymentAmount->Index];
if ((!VarIsNull(AValue)) && (VarAsType(AValue, varInteger) <= 300000))
OutArguments.CountValue--;
}
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::miGroupFootersClick(
TObject *Sender)
{
tvOrders->OptionsView->GroupFooters = (TcxGridGroupFootersMode)((TMenuItem*)Sender)->MenuIndex;
UpdateMenu();
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::miMultipleSummariesInFooterClick(
TObject *Sender)
{
tvOrders->OptionsView->FooterMultiSummaries = !tvOrders->OptionsView->FooterMultiSummaries;
UpdateMenu();
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::miMultipleSummariesInGroupFootersClick(
TObject *Sender)
{
tvOrders->OptionsView->GroupFooterMultiSummaries = !tvOrders->OptionsView->GroupFooterMultiSummaries;
UpdateMenu();
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::tvOrdersStylesGetFooterSummaryStyle(
TcxGridTableView *AView, TcxCustomGridRow *ARow,
TcxGridColumn *AColumn, int AFooterGroupLevel,
TcxDataSummaryItem *ASummaryItem, TcxStyle *&AStyle)
{
switch (ASummaryItem->Kind) {
case skMin:
AStyle = SummaryMultiDemoDataDM->styleRed;
break;
case skMax:
AStyle = SummaryMultiDemoDataDM->styleBlue;
break;
}
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::tvOrdersStylesGetGroupSummaryStyle(
TcxGridTableView *Sender, TcxGridGroupRow *ARow,
TcxGridColumn *AColumn, TcxDataSummaryItem *ASummaryItem,
TcxStyle *&AStyle)
{
if (ASummaryItem != NULL)
tvOrdersStylesGetFooterSummaryStyle(Sender, ARow, AColumn, ARow->Level, ASummaryItem, AStyle);
}
//---------------------------------------------------------------------------