📄 summaryfooterdemoeditsummary.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 + -