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

📄 summaryfooterdemoeditsummary.pas

📁 DevExpress ExpressQuantumGrid Suite v5.9 Full Source
💻 PAS
字号:
unit SummaryFooterDemoEditSummary;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, cxControls, cxContainer, cxEdit, cxTextEdit,
  cxMaskEdit, cxDropDownEdit, cxCustomData, cxGridDBTableView, cxGridTableView,
  cxCalendar, ExtCtrls, cxCheckBox, cxButtons, cxImageComboBox, DB, cxListBox,
  cxLookAndFeelPainters;

type
  TSummaryFooterDemoEditSummaryForm = class(TForm)
    Panel2: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Bevel1: TBevel;
    gbSummaries: TGroupBox;
    Panel4: TPanel;
    lbSummaries: TcxListBox;
    btnAdd: TcxButton;
    btnExit: TcxButton;
    btnDelete: TcxButton;
    cbCalculatedColumn: TcxComboBox;
    cbFooterSummaryColumn: TcxComboBox;
    cbSummaryKind: TcxImageComboBox;
    procedure FormCreate(Sender: TObject);
    procedure btnAddClick(Sender: TObject);
    procedure btnDeleteClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure cbCalculatedColumnPropertiesChange(Sender: TObject);
    procedure cbFooterSummaryColumnPropertiesChange(Sender: TObject);
  private
    { Private declarations }
    procedure UpdateSummaryKinds(AField: TField = nil);
    procedure UpdateSummaryList(AFistItemActive: Boolean);
    function GetFooterSummaryItems: TcxDataFooterSummaryItems;
    function GetFocusedView: TcxGridDBTableView;

  public
    { Public declarations }
    property FooterSummaryItems: TcxDataFooterSummaryItems read GetFooterSummaryItems;
    property GridView: TcxGridDBTableView read GetFocusedView;
  end;

var
  SummaryFooterDemoEditSummaryForm: TSummaryFooterDemoEditSummaryForm;

implementation

uses
  SummaryFooterDemoMain, cxGridCustomTableView, SummaryFooterDemoData;

{$R *.dfm}

procedure TSummaryFooterDemoEditSummaryForm.btnAddClick(Sender: TObject);
var
  AColumn: TcxGridDBColumn;
begin
  with TcxGridDBTableSummaryItem(FooterSummaryItems.Add) do
  try
    try
      BeginUpdate;
      if cbFooterSummaryColumn.ItemIndex <> -1 then
      Column := TcxGridDBColumn(
        GridView.VisibleColumns[cbFooterSummaryColumn.ItemIndex]);
      AColumn := nil;
      if cbCalculatedColumn.ItemIndex <> -1 then
        AColumn := TcxGridDBColumn(
          GridView.VisibleColumns[cbCalculatedColumn.ItemIndex]);
      if Assigned(AColumn) then
        FieldName := AColumn.DataBinding.FieldName;
      Kind := TcxSummaryKind(Integer(cbSummaryKind.EditValue));
      cbFooterSummaryColumn.ItemIndex := 0;
      cbSummaryKind.EditValue := 0;
    finally
      EndUpdate;
    end;
  except
    MessageDlg('Invalid Data', mtError, [mbOK], 0);
    FooterSummaryItems.Items[FooterSummaryItems.Count-1].Free;
  end;
  UpdateSummaryList(False);
end;

function TSummaryFooterDemoEditSummaryForm.GetFocusedView: TcxGridDBTableView;
begin
  Result := TcxGridDBTableView(SummaryFooterDemoMainForm.Grid.FocusedView);
end;

function TSummaryFooterDemoEditSummaryForm.GetFooterSummaryItems: TcxDataFooterSummaryItems;
var
  ASummary: TcxDataSummary;
begin
  ASummary := SummaryFooterDemoMainForm.
    Grid.FocusedView.DataController.Summary;
  Result := ASummary.FooterSummaryItems;
end;

procedure TSummaryFooterDemoEditSummaryForm.UpdateSummaryList(
  AFistItemActive: Boolean);
var
  i: Integer;
begin
  lbSummaries.Clear;
  for i := 0 to FooterSummaryItems.Count - 1 do
    if Assigned(FooterSummaryItems[i].ItemLink) then
      lbSummaries.Items.Add(
        TcxGridDBColumn(FooterSummaryItems[i].ItemLink).Caption)
    else
      lbSummaries.Items.Add('Unassigned');
  if AFistItemActive then lbSummaries.ItemIndex := 0
  else lbSummaries.ItemIndex := lbSummaries.Items.Count - 1;
  btnDelete.Enabled := lbSummaries.Items.Count > 0;
end;

procedure TSummaryFooterDemoEditSummaryForm.btnDeleteClick(
  Sender: TObject);
var
  AItem: TcxGridDBTableSummaryItem;
  I: Integer;
  AColumn: TcxGridDBColumn;
begin
  AItem := TcxGridDBTableSummaryItem(FooterSummaryItems[lbSummaries.ItemIndex]);
  if AItem.FieldName <> '' then
    for I := 0 to GridView.VisibleColumnCount - 1 do
    begin
      AColumn := TcxGridDBColumn(GridView.VisibleColumns[I]);
      if AColumn.DataBinding.FieldName = AItem.FieldName then
      begin
        cbCalculatedColumn.ItemIndex := AColumn.VisibleIndex;
        break;
      end;
    end;
  if Assigned(AItem.Column) then
    cbFooterSummaryColumn.ItemIndex := AItem.Column.VisibleIndex;
  cbSummaryKind.EditValue := Integer(AItem.Kind);
  FooterSummaryItems.Items[lbSummaries.ItemIndex].Free;
  UpdateSummaryList(True);
end;

procedure TSummaryFooterDemoEditSummaryForm.FormShow(Sender: TObject);
var
  I: Integer;
begin
  cbCalculatedColumn.Properties.Items.Clear;
  cbFooterSummaryColumn.Properties.Items.Clear;
  for I := 0 to GridView.VisibleColumnCount - 1 do
  begin
    cbCalculatedColumn.Properties.Items.Add(GridView.VisibleColumns[I].Caption);
    cbFooterSummaryColumn.Properties.Items.Add(GridView.VisibleColumns[I].Caption);
  end;
  if GridView.VisibleColumnCount > 0 then
    cbFooterSummaryColumn.ItemIndex := 0
  else
    btnAdd.Enabled := false;
  UpdateSummaryList(True);
end;

procedure TSummaryFooterDemoEditSummaryForm.cbCalculatedColumnPropertiesChange(
  Sender: TObject);
var
  AColumn: TcxGridDBColumn;
begin
  if cbCalculatedColumn.ItemIndex <> -1 then
  begin
    AColumn :=
      TcxGridDBColumn(GridView.VisibleColumns[cbCalculatedColumn.ItemIndex]);
    UpdateSummaryKinds(AColumn.DataBinding.Field);
  end;
end;

procedure TSummaryFooterDemoEditSummaryForm.cbFooterSummaryColumnPropertiesChange(
  Sender: TObject);
begin
 cbCalculatedColumn.ItemIndex := cbFooterSummaryColumn.ItemIndex;
end;

procedure TSummaryFooterDemoEditSummaryForm.UpdateSummaryKinds(
  AField: TField = nil);
  procedure AddSummaryKind(AKind: TcxSummaryKind);
  var
    AItem: TcxImageComboboxItem;
    procedure SetItemProperties(ADescription: string; AImageIndex: Integer;
      AValue: Integer);
    begin
      AItem.Description := ADescription;
      AItem.ImageIndex := AImageIndex;
      AItem.Value := AValue;
    end;
  begin
    AItem := TcxImageComboboxItem(cbSummaryKind.Properties.Items.Add);
    case AKind of
      skNone:
        SetItemProperties('None', -1, 0);
      skSum:
        SetItemProperties('Sum', 6, 1);
      skMin:
        SetItemProperties('Min', 5, 2);
      skMax:
        SetItemProperties('Max', 4, 3);
      skCount:
        SetItemProperties('Count', 3, 4);
      skAverage:
        SetItemProperties('Average', 7, 5);
    end;
  end;
const
  NumberFieldTypes =
  [ftSmallint, ftInteger, ftWord, ftFloat, ftCurrency, ftBCD, ftDate, ftTime,
      ftDateTime, ftAutoInc];
  TimeFieldTypes = [ftDate, ftTime, ftDateTime];
begin
    cbSummaryKind.Properties.Items.Clear;
    if Assigned(AField) then
    begin
      AddSummaryKind(skNone);
      AddSummaryKind(skCount);
      if AField.DataType in NumberFieldTypes then
      begin
        AddSummaryKind(skMax);
        AddSummaryKind(skMin);
      if not (AField.DataType in TimeFieldTypes) then
      begin
        AddSummaryKind(skSum);
        AddSummaryKind(skAverage);
      end;
      end;
    end;
    if cbSummaryKind.Properties.Items.Count = 0 then
      cbSummaryKind.Enabled := False
    else
    begin
      cbSummaryKind.Enabled := True;
      cbSummaryKind.EditValue := 0;
    end;
end;

procedure TSummaryFooterDemoEditSummaryForm.FormCreate(Sender: TObject);
begin
  Position := poScreenCenter;
end;

end.

⌨️ 快捷键说明

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