Componentes.Terceros.DevExp.../official/x.26/ExpressQuantumTreeList 4/Demos/Delphi/SummariesDemo/SummariesDemoEditSummary.pas
2007-09-09 11:27:27 +00:00

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.