git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@8 05c56307-c608-d34a-929d-697000501d7a
243 lines
6.9 KiB
ObjectPascal
243 lines
6.9 KiB
ObjectPascal
unit SummariesDemoEditSummary;
|
|
|
|
interface
|
|
|
|
{$I ..\cxVer.inc}
|
|
|
|
uses
|
|
Windows, Messages, SysUtils
|
|
{$IFDEF DELPHI6}
|
|
, Variants
|
|
{$ENDIF}
|
|
, Classes, Graphics, Controls, Forms,
|
|
Dialogs, StdCtrls, Buttons, cxControls, cxContainer, cxEdit, cxTextEdit,
|
|
cxMaskEdit, cxDropDownEdit, cxCustomData, cxCalendar, ExtCtrls, cxCheckBox,
|
|
cxButtons, cxImageComboBox, DB, cxLookAndFeelPainters, cxListBox, cxDBTL,
|
|
cxGraphics, Menus;
|
|
|
|
type
|
|
TSummariesDemoEditSummaryForm = class(TForm)
|
|
Panel2: TPanel;
|
|
gbSummaries: TGroupBox;
|
|
Panel4: TPanel;
|
|
lbColumns: TcxListBox;
|
|
gbSummaryFooter: TGroupBox;
|
|
Label1: TLabel;
|
|
Label3: TLabel;
|
|
cbCalculatedField: TcxComboBox;
|
|
cbSummaryKind: TcxImageComboBox;
|
|
Panel1: TPanel;
|
|
btnExit: TcxButton;
|
|
procedure cbCalculatedFieldPropertiesChange(Sender: TObject);
|
|
procedure lbColumnsClick(Sender: TObject);
|
|
procedure cbSummaryKindPropertiesChange(Sender: TObject);
|
|
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure btnExitClick(Sender: TObject);
|
|
private
|
|
{ Private declarations }
|
|
FLockColumnSummary: Boolean;
|
|
FTreeList: TcxDBTreeList;
|
|
procedure PopulateVisibleColumnsList;
|
|
procedure PopulateFieldList(ADataSet: TDataSet);
|
|
procedure UpdateCalcField(AColumn: TcxDBTreeListColumn);
|
|
procedure UpdateSummaryKinds(AKind: TcxSummaryKind; AField: TField = nil);
|
|
procedure SetTreeList(const Value: TcxDBTreeList);
|
|
public
|
|
property TreeList: TcxDBTreeList read FTreeList write SetTreeList;
|
|
end;
|
|
|
|
var
|
|
SummariesDemoEditSummaryForm: TSummariesDemoEditSummaryForm;
|
|
|
|
implementation
|
|
|
|
uses SummariesDemoMain, SummariesDemoData, cxDBLookupComboBox;
|
|
|
|
{$R *.dfm}
|
|
procedure TSummariesDemoEditSummaryForm.cbCalculatedFieldPropertiesChange(
|
|
Sender: TObject);
|
|
var
|
|
AColumn: TcxDBTreeListColumn;
|
|
AField: TField;
|
|
begin
|
|
if FLockColumnSummary then Exit;
|
|
if cbCalculatedField.ItemIndex <> -1 then
|
|
begin
|
|
AField :=
|
|
TField(cbCalculatedField.Properties.Items.Objects[cbCalculatedField.ItemIndex]);
|
|
AColumn :=
|
|
TcxDBTreeListColumn(lbColumns.Items.Objects[lbColumns.ItemIndex]);
|
|
AColumn.SummaryFooter.FieldName := AField.FieldName;
|
|
UpdateSummaryKinds(skNone, AField);
|
|
cbSummaryKindPropertiesChange(nil);
|
|
end;
|
|
end;
|
|
|
|
procedure TSummariesDemoEditSummaryForm.cbSummaryKindPropertiesChange(
|
|
Sender: TObject);
|
|
var
|
|
AColumn: TcxDBTreeListColumn;
|
|
begin
|
|
if FLockColumnSummary then Exit;
|
|
if (cbSummaryKind.ItemIndex <> -1) and (lbColumns.ItemIndex <> -1) then
|
|
begin
|
|
AColumn :=
|
|
TcxDBTreeListColumn(lbColumns.Items.Objects[lbColumns.ItemIndex]);
|
|
AColumn.SummaryFooter.Kind := TcxSummaryKind(cbSummaryKind.EditValue);
|
|
AColumn.Options.Footer := TcxSummaryKind(cbSummaryKind.EditValue) <> skNone;
|
|
end;
|
|
end;
|
|
|
|
procedure TSummariesDemoEditSummaryForm.lbColumnsClick(Sender: TObject);
|
|
var
|
|
AColumn: TcxDBTreeListColumn;
|
|
ADataSet: TDataSet;
|
|
AField: TField;
|
|
AKind: TcxSummaryKind;
|
|
begin
|
|
AColumn :=
|
|
TcxDBTreeListColumn(lbColumns.Items.Objects[lbColumns.ItemIndex]);
|
|
UpdateCalcField(AColumn);
|
|
ADataSet := FTreeList.DataController.DataSet;
|
|
AField := ADataSet.FindField(AColumn.SummaryFooter.FieldName);
|
|
if not Assigned(AField) then
|
|
AField := AColumn.DataBinding.Field;
|
|
AKind := AColumn.SummaryFooter.Kind;
|
|
UpdateSummaryKinds(AKind, AField);
|
|
end;
|
|
|
|
procedure TSummariesDemoEditSummaryForm.UpdateCalcField(
|
|
AColumn: TcxDBTreeListColumn);
|
|
var
|
|
AIndex: Integer;
|
|
AFieldName: string;
|
|
begin
|
|
if AColumn.SummaryFooter.FieldName <> '' then
|
|
AFieldName := AColumn.SummaryFooter.FieldName
|
|
else
|
|
AFieldName := AColumn.DataBinding.FieldName;
|
|
FLockColumnSummary := True;
|
|
try
|
|
AIndex :=
|
|
cbCalculatedField.Properties.Items.IndexOf(AFieldName);
|
|
cbCalculatedField.ItemIndex := AIndex;
|
|
finally
|
|
FLockColumnSummary := False;
|
|
end;
|
|
end;
|
|
|
|
procedure TSummariesDemoEditSummaryForm.UpdateSummaryKinds(AKind: TcxSummaryKind;
|
|
AField: TField = nil);
|
|
const
|
|
ImgIndNone = -1;
|
|
ImgIndCnt = 4;
|
|
ImgIndMAX = 5;
|
|
ImgIndMIN = 6;
|
|
ImgIndSUM = 7;
|
|
ImgIndAVG = 8;
|
|
|
|
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', ImgIndNone, 0);
|
|
skSum:
|
|
SetItemProperties('Sum', ImgIndSUM, 1);
|
|
skMin:
|
|
SetItemProperties('Min', ImgIndMIN, 2);
|
|
skMax:
|
|
SetItemProperties('Max', ImgIndMAX, 3);
|
|
skCount:
|
|
SetItemProperties('Count', ImgIndCNT, 4);
|
|
skAverage:
|
|
SetItemProperties('Average', ImgIndAVG, 5);
|
|
end;
|
|
end;
|
|
const
|
|
NumberFieldTypes =
|
|
[ftSmallint, ftInteger, ftWord, ftFloat, ftCurrency, ftBCD, ftDate, ftTime,
|
|
ftDateTime, ftAutoInc];
|
|
TimeFieldTypes = [ftDate, ftTime, ftDateTime];
|
|
begin
|
|
FLockColumnSummary := True;
|
|
try
|
|
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;
|
|
cbSummaryKind.EditValue := AKind;
|
|
finally
|
|
FLockColumnSummary := False;
|
|
end;
|
|
end;
|
|
|
|
procedure TSummariesDemoEditSummaryForm.PopulateVisibleColumnsList;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
lbColumns.Items.Clear;
|
|
for I := 0 to FTreeList.VisibleColumnCount - 1 do
|
|
begin
|
|
lbColumns.Items.
|
|
AddObject(FTreeList.VisibleColumns[I].Caption.Text,
|
|
FTreeList.VisibleColumns[I]);
|
|
end;
|
|
if lbColumns.Count > 0 then
|
|
lbColumns.ItemIndex := 0;
|
|
end;
|
|
|
|
procedure TSummariesDemoEditSummaryForm.SetTreeList(
|
|
const Value: TcxDBTreeList);
|
|
begin
|
|
FTreeList := Value;
|
|
PopulateFieldList(FTreeList.DataController.DataSet);
|
|
PopulateVisibleColumnsList;
|
|
lbColumnsClick(lbColumns);
|
|
end;
|
|
|
|
procedure TSummariesDemoEditSummaryForm.PopulateFieldList(ADataSet: TDataSet);
|
|
begin
|
|
ADataSet.GetFieldNames(cbCalculatedField.Properties.Items);
|
|
end;
|
|
|
|
procedure TSummariesDemoEditSummaryForm.FormClose(Sender: TObject;
|
|
var Action: TCloseAction);
|
|
begin
|
|
Action := caFree;
|
|
end;
|
|
|
|
procedure TSummariesDemoEditSummaryForm.FormDestroy(Sender: TObject);
|
|
begin
|
|
SummariesDemoEditSummaryForm := nil;
|
|
end;
|
|
|
|
procedure TSummariesDemoEditSummaryForm.btnExitClick(Sender: TObject);
|
|
begin
|
|
Close;
|
|
end;
|
|
|
|
end.
|