git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@7 05c56307-c608-d34a-929d-697000501d7a
230 lines
8.9 KiB
C++
230 lines
8.9 KiB
C++
//---------------------------------------------------------------------------
|
|
|
|
#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--;
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|