⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 summarymultidemomain.cpp

📁 DevExpress ExpressQuantumGrid Suite v5.9 Full Source
💻 CPP
字号:
//---------------------------------------------------------------------------

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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -