//--------------------------------------------------------------------------- #include #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<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<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--; } } //---------------------------------------------------------------------------