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

📄 summarymultidemomain.pas

📁 胜天进销存源码,国产优秀的进销存
💻 PAS
字号:
unit SummaryMultiDemoMain;

{$I ..\..\cxVer.inc}

interface

uses
{$IFDEF DELPHI6}
  Variants,
{$ENDIF}
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, cxGridLevel, cxGridCustomTableView, cxGridTableView,
  cxGridDBTableView, cxControls, cxGridCustomView, cxGrid, cxCustomData,
  ExtCtrls, ActnList, ImgList, Menus, ComCtrls, cxGridCustomPopupMenu,
  cxGridPopupMenu, ToolWin, cxStyles, cxGraphics, cxFilter, cxData, cxEdit,
  DB, cxDBData, cxClasses, cxDataStorage, cxDBLookupComboBox, cxCalendar,
  cxImageComboBox, cxCalc, cxBlobEdit, cxSpinEdit, cxLookAndFeels;

type
  TSummaryMultiDemoMainForm = class(TForm)
    mmMain: TMainMenu;
    miAbout: TMenuItem;
    miFile: TMenuItem;
    miOptions: TMenuItem;
    miExit: TMenuItem;
    miSummaries: TMenuItem;
    sbMain: TStatusBar;
    Grid: TcxGrid;
    tvOrders: TcxGridDBTableView;
    tvOrdersCustomerID: TcxGridDBColumn;
    tvOrdersPurchaseDate: TcxGridDBColumn;
    tvOrdersPaymentType: TcxGridDBColumn;
    tvOrdersPaymentAmount: TcxGridDBColumn;
    tvOrdersQuantity: TcxGridDBColumn;
    lbDescription: TLabel;
    miSelectedRecordsOnly: TMenuItem;
    miIgnoreNullValues: TMenuItem;
    N1: TMenuItem;
    miGroupFooters: TMenuItem;
    miMultiSelect: TMenuItem;
    miGroupFooterAlwaysShow: TMenuItem;
    miGroupFooterNeverShow: TMenuItem;
    miGroupFooterShowWhenExpand: TMenuItem;
    cxGridPopupMenu1: TcxGridPopupMenu;
    lvOrders: TcxGridLevel;
    tvOrdersProductID: TcxGridDBColumn;
    miUseOnAfterSummaryEvent: TMenuItem;
    LookAndFeelController: TcxLookAndFeelController;
    miMultipleSummariesInFooter: TMenuItem;
    miMultipleSummariesInGroupFooters: TMenuItem;
    N2: TMenuItem;
    procedure miAboutClick(Sender: TObject);
    procedure miExitClick(Sender: TObject);
    procedure miSelectedRecordsOnlyClick(Sender: TObject);
    procedure miIgnoreNullValuesClick(Sender: TObject);
    procedure miMultiSelectClick(Sender: TObject);
    procedure miGroupFootersClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure tvOrdersDataControllerSummaryAfterSummary(
      ASender: TcxDataSummary);
    procedure miUseOnAfterSummaryEventClick(Sender: TObject);
    procedure tvOrdersDataControllerSummaryDefaultGroupSummaryItemsSummary(
      ASender: TcxDataSummaryItems; Arguments: TcxSummaryEventArguments;
      var OutArguments: TcxSummaryEventOutArguments);
    procedure tvOrdersStylesGetFooterSummaryStyle(AView: TcxGridTableView;
      ARow: TcxCustomGridRow; AColumn: TcxGridColumn;
      AFooterGroupLevel: Integer; ASummaryItem: TcxDataSummaryItem;
      var AStyle: TcxStyle);
    procedure tvOrdersStylesGetGroupSummaryStyle(Sender: TcxGridTableView;
      ARow: TcxGridGroupRow; AColumn: TcxGridColumn;
      ASummaryItem: TcxDataSummaryItem; var AStyle: TcxStyle);
    procedure miMultipleSummariesInFooterClick(Sender: TObject);
    procedure miMultipleSummariesInGroupFootersClick(Sender: TObject);
  protected
    procedure UpdateMenu;
  public
    { Public declarations }
  end;

var
  SummaryMultiDemoMainForm: TSummaryMultiDemoMainForm;

implementation

{$R *.dfm}

uses
  SummaryMultiDemoData, AboutDemoForm;

procedure TSummaryMultiDemoMainForm.UpdateMenu;
begin
  miSelectedRecordsOnly.Checked := soSelectedRecords in tvOrders.DataController.Summary.Options;
  miIgnoreNullValues.Checked := soNullIgnore in tvOrders.DataController.Summary.Options;
  miUseOnAfterSummaryEvent.Checked := Assigned(tvOrders.DataController.Summary.OnAfterSummary);
  miGroupFooters[Ord(tvOrders.OptionsView.GroupFooters)].Checked := True;
  miMultipleSummariesInFooter.Checked := tvOrders.OptionsView.FooterMultiSummaries;
  miMultipleSummariesInGroupFooters.Checked := tvOrders.OptionsView.GroupFooterMultiSummaries;
  miMultiSelect.Checked := tvOrders.OptionsSelection.MultiSelect;
end;

procedure TSummaryMultiDemoMainForm.miAboutClick(Sender: TObject);
begin
  ShowAboutDemoForm;
end;

procedure TSummaryMultiDemoMainForm.miExitClick(Sender: TObject);
begin
  Close;
end;

procedure TSummaryMultiDemoMainForm.miSelectedRecordsOnlyClick(Sender: TObject);
begin
  with tvOrders.DataController.Summary do
    if soSelectedRecords in Options then
      Options := Options - [soSelectedRecords]
    else
      Options := Options + [soSelectedRecords];
  UpdateMenu;
end;

procedure TSummaryMultiDemoMainForm.miIgnoreNullValuesClick(Sender: TObject);
begin
  with tvOrders.DataController.Summary do
    if soNullIgnore in Options then
      Options := Options - [soNullIgnore]
    else
      Options := Options + [soNullIgnore];
  UpdateMenu;
end;

procedure TSummaryMultiDemoMainForm.miMultipleSummariesInFooterClick(
  Sender: TObject);
begin
  with tvOrders.OptionsView do
    FooterMultiSummaries := not FooterMultiSummaries;
  UpdateMenu;
end;

procedure TSummaryMultiDemoMainForm.miMultipleSummariesInGroupFootersClick(
  Sender: TObject);
begin
  with tvOrders.OptionsView do
    GroupFooterMultiSummaries := not GroupFooterMultiSummaries;
  UpdateMenu;
end;

procedure TSummaryMultiDemoMainForm.miMultiSelectClick(Sender: TObject);
begin
  with tvOrders.OptionsSelection do
    MultiSelect := not MultiSelect;
  UpdateMenu;
end;

procedure TSummaryMultiDemoMainForm.miGroupFootersClick(Sender: TObject);
begin
  tvOrders.OptionsView.GroupFooters := TcxGridGroupFootersMode(TMenuItem(Sender).MenuIndex);
  UpdateMenu;
end;

procedure TSummaryMultiDemoMainForm.tvOrdersStylesGetFooterSummaryStyle(
  AView: TcxGridTableView; ARow: TcxCustomGridRow; AColumn: TcxGridColumn;
  AFooterGroupLevel: Integer; ASummaryItem: TcxDataSummaryItem;
  var AStyle: TcxStyle);
begin
  case ASummaryItem.Kind of
    skMin:
      AStyle := SummaryMultiDemoDataDM.styleRed;
    skMax:
      AStyle := SummaryMultiDemoDataDM.styleBlue;
  end;
end;

procedure TSummaryMultiDemoMainForm.tvOrdersStylesGetGroupSummaryStyle(
  Sender: TcxGridTableView; ARow: TcxGridGroupRow; AColumn: TcxGridColumn;
  ASummaryItem: TcxDataSummaryItem; var AStyle: TcxStyle);
begin
  if ASummaryItem <> nil then
    tvOrdersStylesGetFooterSummaryStyle(Sender, ARow, AColumn, ARow.Level, ASummaryItem, AStyle);
end;

procedure TSummaryMultiDemoMainForm.FormShow(Sender: TObject);
begin
  tvOrders.DataController.Groups.ChangeExpanding(0, True, False);
  tvOrders.DataController.GotoFirst;
  UpdateMenu;
end;

procedure TSummaryMultiDemoMainForm.miUseOnAfterSummaryEventClick(Sender: TObject);
var
  ASummary: TcxDataSummary;
begin
  ASummary := tvOrders.DataController.Summary;
  ASummary.BeginUpdate;
  try
    if Assigned(ASummary.OnAfterSummary) then
      ASummary.OnAfterSummary := nil
    else
      ASummary.OnAfterSummary := tvOrdersDataControllerSummaryAfterSummary;
  finally
    ASummary.EndUpdate;
  end;
  UpdateMenu;
end;

procedure TSummaryMultiDemoMainForm.tvOrdersDataControllerSummaryAfterSummary(
  ASender: TcxDataSummary);

  function CalculateFooterSummaryValue(AIndex: Integer; AKind: TcxSummaryKind): Variant;
  var
    AGroups: TcxDataControllerGroups;
    I: Integer;
    AValue: Variant;
  begin
    AGroups := tvOrders.DataController.Groups;
    if AKind = skCount then
      Result := AGroups.ChildCount[-1]
    else
    begin
      Result := Null;
      for I := 0 to AGroups.ChildCount[-1] - 1 do
      begin;
        AValue := ASender.GroupSummaryValues[AGroups.ChildDataGroupIndex[-1, I], AIndex];
        if not VarIsNull(AValue) then
          if VarIsNull(Result) then
            Result := AValue
          else
            case AKind of
              skMin:
                if AValue < Result then
                  Result := AValue;
              skMax:
                if AValue > Result then
                  Result := AValue;
              skSum, skAverage:
                Result := Result + AValue;
            end;
      end;
      if (AKind = skAverage) and not VarIsNull(Result) and (AGroups.ChildCount[-1] <> 0) then
        Result := Result / AGroups.ChildCount[-1];
    end;
  end;

var
  AFooterSummaryItems: TcxDataFooterSummaryItems;
  AGroupSummaryItems: TcxDataGroupSummaryItems;
  I: Integer;
  AGroupSummaryItem: TcxDataSummaryItem;
  AValue: Variant;
begin  // calculate footer summaries using the group footer summary values, not actual data values
  if tvOrders.GroupedColumnCount = 0 then Exit;
  AFooterSummaryItems := ASender.FooterSummaryItems;
  AGroupSummaryItems := ASender.GroupSummaryItems[0];
  for I := 0 to AFooterSummaryItems.Count - 1 do
  begin
    AGroupSummaryItem := AGroupSummaryItems.GetDataItem(
      (AFooterSummaryItems[I].ItemLink as TcxGridColumn).Index, spFooter);
    if AGroupSummaryItem <> nil then
    begin
      AValue := CalculateFooterSummaryValue(AGroupSummaryItem.Index, AFooterSummaryItems[I].Kind);
      if not VarIsNull(AValue) then
        ASender.FooterSummaryValues[I] := VarAsType(AValue, VarType(ASender.FooterSummaryValues[I]));
    end;
  end;
end;

procedure TSummaryMultiDemoMainForm.tvOrdersDataControllerSummaryDefaultGroupSummaryItemsSummary(
  ASender: TcxDataSummaryItems; Arguments: TcxSummaryEventArguments;
  var OutArguments: TcxSummaryEventOutArguments);
var
  AItem: TcxDataSummaryItem;
  AValue: Variant;
begin  // calculate the number of orders with the PaymentAmount > $300,000
  AItem := Arguments.SummaryItem;
  if (AItem.ItemLink = tvOrdersProductID) and
    (AItem.Kind = skCount) and (AItem.Position = spGroup) then
  begin
    AValue := tvOrders.DataController.Values[Arguments.RecordIndex, tvOrdersPaymentAmount.Index];
    if not VarIsNull(AValue) and (VarAsType(AValue, varInteger) <= 300000) then
      Dec(OutArguments.CountValue);
  end;
end;

end.

⌨️ 快捷键说明

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