Componentes.Terceros.DevExp.../official/x.19/ExpressQuantumGrid 5/Demos/CBuilder/SummaryMultiDemo/SummaryMultiDemoMain.cpp

230 lines
8.9 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 resource "*.dfm"
TSummaryMultiDemoMainForm *SummaryMultiDemoMainForm;
//---------------------------------------------------------------------------
__fastcall TSummaryMultiDemoMainForm::TSummaryMultiDemoMainForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::miAboutClick(TObject *Sender)
{
ShowAboutDemoForm();
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::miExitClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::FormShow(TObject *Sender)
{
if(SummaryMultiDemoDataDM->tblOrders->Active) {
tvOrders->DataController->Groups->FullCollapse();
tvOrders->DataController->Groups->ChangeExpanding(0, false, false);
tvOrders->DataController->GotoFirst();
}
tvOrders->DataController->Summary->BeginUpdate();
tvOrders->DataController->Summary->DefaultGroupSummaryItems->OnSummary =
tvOrdersDataControllerSummaryDefaultGroupSummaryItemsSummary;
tvOrders->DataController->Summary->EndUpdate();
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::miSelectedRedcordsOnlyClick(
TObject *Sender)
{
TcxDataSummary* ASummary = Grid->FocusedView->DataController->Summary;
if(ASummary->Options.Contains(soSelectedRecords))
ASummary->Options = ASummary->Options>>soSelectedRecords;
else
ASummary->Options = ASummary->Options<<soSelectedRecords;
((TMenuItem*)Sender)->Checked = !((TMenuItem*)Sender)->Checked;
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::miIgnoreNullValuesClick(
TObject *Sender)
{
TcxDataSummary* ASummary = Grid->FocusedView->DataController->Summary;
if(ASummary->Options.Contains(soNullIgnore))
ASummary->Options = ASummary->Options>>soNullIgnore;
else
ASummary->Options = ASummary->Options<<soNullIgnore;
((TMenuItem*)Sender)->Checked = !((TMenuItem*)Sender)->Checked;
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::miMultiSelectClick(
TObject *Sender)
{
TcxGridDBTableView* AView = (TcxGridDBTableView*)Grid->FocusedView;
AView->OptionsSelection->MultiSelect = !AView->OptionsSelection->MultiSelect;
((TMenuItem*)Sender)->Checked = !((TMenuItem*)Sender)->Checked;
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::GridFocusedViewChanged(
TcxCustomGrid *Sender, TcxCustomGridView *APrevFocusedView,
TcxCustomGridView *AFocusedView)
{
TcxGridDBTableView* AView = (TcxGridDBTableView*)Grid->FocusedView;
miSelectedRedcordsOnly->Checked = AView->DataController->Summary->Options.Contains(soSelectedRecords);
miIgnoreNullValues->Checked = AView->DataController->Summary->Options.Contains(soNullIgnore);
miMultiSelect->Checked = AView->OptionsSelection->MultiSelect;
miGroupFooterAlwaysShow->Checked = AView->OptionsView->GroupFooters == gfAlwaysVisible;
miGroupFooterNeverToShow->Checked = AView->OptionsView->GroupFooters == gfInvisible;
miGroupFooterShowWhenExpand->Checked = AView->OptionsView->GroupFooters == gfVisibleWhenExpanded;
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::miGroupFooterShowClick(TObject *Sender)
{
TcxGridDBTableView* AView = (TcxGridDBTableView*)Grid->FocusedView;
AView->OptionsView->GroupFooters = (TcxGridGroupFootersMode)((TMenuItem*)Sender)->Tag;
((TMenuItem*)Sender)->Checked = true;
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::tvOrdersStylesGetGroupStyle(
TcxGridTableView *Sender, TcxCustomGridRecord *ARecord, int ALevel,
TcxStyle *&AStyle)
{
if(ALevel % 2 == 0)
AStyle = SummaryMultiDemoDataDM->stGreyLight;
else
AStyle = SummaryMultiDemoDataDM->stBlueSky;
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::miUseOnAfterSummaryEventClick(TObject *Sender)
{
TcxDataSummary* ASummary = tvOrders->DataController->Summary;
try {
ASummary->BeginUpdate();
if(((TMenuItem*)Sender)->Checked)
ASummary->OnAfterSummary = NULL;
else
ASummary->OnAfterSummary = tvOrdersDataControllerSummaryAfterSummary;
}
__finally {
ASummary->EndUpdate();
}
((TMenuItem*)Sender)->Checked = !((TMenuItem*)Sender)->Checked;
}
//---------------------------------------------------------------------------
Variant TSummaryMultiDemoMainForm::GetFooterSummaryValues(int AIndex, TcxSummaryKind AKind,
TcxDataControllerGroups* AGroups, TcxDataSummary* ASummary)
{
Variant AValue;
Variant Result;
if(AKind != skCount) {
Result = ASummary->GroupSummaryValues[AGroups->ChildDataGroupIndex[-1][0]][AIndex];
for(int k = 1; k < AGroups->ChildCount[-1]; k++) {
AValue = ASummary->GroupSummaryValues[AGroups->ChildDataGroupIndex[-1][k]][AIndex];
if (VarIsNull(Result) && !VarIsNull(AValue)) {
Result = AValue;
continue;
}
if(!VarIsNull(AValue)) {
switch(AKind) {
case skMin:
if(Result > AValue)
Result = AValue;
break;
case skMax:
if(Result < AValue)
Result = AValue;
break;
case skSum:
case skAverage:
Result += AValue;
break;
};
}
}
if((AKind == skAverage) && (AGroups->ChildCount[-1] > 0) &&
!VarIsNull(Result))
Result /= AGroups->ChildCount[-1];
}
else
Result = AGroups->ChildCount[-1];
return Result;
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::tvOrdersDataControllerSummaryAfterSummary(
TcxDataSummary* ASender)
{
TcxDataControllerGroups* AGroups = tvOrders->DataController->Groups;
if(AGroups->GroupingItemCount > 0) {
TcxDataSummary* ASummary = tvOrders->DataController->Summary;
TcxDataGroupSummaryItems* AGroupSummaryItems = ASummary->GroupSummaryItems[0];
TcxDataFooterSummaryItems* AFooterSummaryItems = ASummary->FooterSummaryItems;
for(int i = 0; i < AFooterSummaryItems->Count; i++) {
int AVarType = VarType(ASummary->FooterSummaryValues[i]);
ASummary->FooterSummaryValues[i] = NULL;
for(int j = 0; j < AGroupSummaryItems->Count; j++) {
if((((TcxGridTableSummaryItem*)AFooterSummaryItems->Items[i])->Column ==
((TcxGridTableSummaryItem*)AGroupSummaryItems->Items[j])->Column) &&
(AGroupSummaryItems->Items[j]->Position == spFooter)) {
Variant AValue = GetFooterSummaryValues(j, AFooterSummaryItems->Items[i]->Kind,
AGroups, ASummary);
if(!VarIsNull(AValue))
ASummary->FooterSummaryValues[i] = VarAsType(AValue, AVarType);
}
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TSummaryMultiDemoMainForm::tvOrdersDataControllerSummaryDefaultGroupSummaryItemsSummary(
TcxDataSummaryItems *ASender, const TcxSummaryEventArguments &Arguments,
TcxSummaryEventOutArguments &OutArguments)
{
TcxGridTableSummaryItem* AItem = (TcxGridTableSummaryItem*)Arguments.SummaryItem;
if((AItem->Column == tvOrdersProductID) && (AItem->Kind == skCount) &&
(AItem->Position == spGroup)) {
Variant AValue = tvOrders->DataController->Values[Arguments.RecordIndex]
[tvOrdersPaymentAmount->Index];
if(!VarIsNull(AValue))
if(VarAsType(AValue, varInteger) <= 300000)
OutArguments.CountValue--;
}
}
//---------------------------------------------------------------------------