git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@8 05c56307-c608-d34a-929d-697000501d7a
246 lines
7.5 KiB
ObjectPascal
246 lines
7.5 KiB
ObjectPascal
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.
|