cxcustomdata.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,436 行 · 第 1/5 页

PAS
1,436
字号
    procedure Update; override;
    property Destroying: Boolean read FDestroying;
  public
    constructor Create(ADataController: TcxCustomDataController); virtual;
    destructor Destroy; override;
    procedure Assign(Source: TPersistent; AIgnoreItemNames: Boolean = False); override;
    procedure AssignEvents(Source: TPersistent); override;
    function CreateValueList: TcxDataFilterValueList; virtual;
    function FindItemByItemLink(AItemLink: TObject): TcxFilterCriteriaItem; override;
    function IsFiltering: Boolean; virtual;
    procedure RemoveItemByField(AField: TcxCustomDataField);
    property DataController: TcxCustomDataController read FDataController;
  published
    property Active: Boolean read FActive write SetActive default False;
    property OnGetValueList: TcxDataFilterGetValueListEvent read FOnGetValueList write FOnGetValueList;
  end;

  TcxDataFilterCriteriaClass = class of TcxDataFilterCriteria;

  { Filters }

  TcxDataFilterList = class(TList)
  private
    function GetItem(Index: Integer): TcxDataFilterCriteria;
  protected
    procedure RemoveItemByField(AField: TcxCustomDataField);
  public
    procedure Clear; override;
    property Items[Index: Integer]: TcxDataFilterCriteria read GetItem; default;
  end;

  { Groups }

  TcxDataGroupIndex = Integer;

  TcxDataControllerGroups = class
  private
    FDataController: TcxCustomDataController;
    function GetChildCount(DataGroupIndex: TcxDataGroupIndex): Integer;
    function GetChildDataGroupIndex(ParentDataGroupIndex: TcxDataGroupIndex; ChildIndex: Integer): TcxDataGroupIndex;
    function GetChildRecordIndex(ParentDataGroupIndex: TcxDataGroupIndex; ChildIndex: Integer): Integer;
    function GetDataControllerInfo: TcxCustomDataControllerInfo;
    function GetDataGroupIndexByRowIndex(RowIndex: Integer): TcxDataGroupIndex;
    function GetDataGroups: TcxDataGroups;
    function GetFieldGroupIndex(AField: TcxCustomDataField): Integer;
    function GetGroupingItemCount: Integer;
    function GetGroupingItemIndex(Index: Integer): Integer;
    function GetGroupDisplayText(ADataGroupIndex: TcxDataGroupIndex): string;
    function GetGroupValue(ADataGroupIndex: TcxDataGroupIndex): Variant;
    function GetItemGroupIndex(AItemIndex: Integer): Integer;
    function GetLevel(ADataGroupIndex: TcxDataGroupIndex): Integer;
    function GetParentDataGroupIndex(ChildDataGroupIndex: TcxDataGroupIndex): TcxDataGroupIndex;
  protected
    function GetGroupRecordIndex(ADataGroupIndex: TcxDataGroupIndex): Integer;
    property DataControllerInfo: TcxCustomDataControllerInfo read GetDataControllerInfo;
    property DataGroups: TcxDataGroups read GetDataGroups;
    property LevelCount: Integer read GetGroupingItemCount;
  public
    constructor Create(ADataController: TcxCustomDataController);
    procedure ChangeExpanding(ARowIndex: Integer; AExpanded, ARecursive: Boolean);
    procedure ChangeGrouping(AItemIndex, AGroupIndex: Integer);
    procedure ClearGrouping;
    procedure FullCollapse;
    procedure FullExpand;
    function GetDataGroupIndexByGroupValue(AParentDataGroupIndex: TcxDataGroupIndex;
      const AGroupValue: Variant): TcxDataGroupIndex;
    function HasAsParent(ARowIndex, AParentRowIndex: Integer): Boolean;
    procedure LoadRecordIndexes(AList: TList; ADataGroupIndex: TcxDataGroupIndex);
    procedure LoadRecordIndexesByRowIndex(AList: TList; ARowIndex: Integer);

    property DataController: TcxCustomDataController read FDataController;
    // Grouping
    property FieldGroupIndex[AField: TcxCustomDataField]: Integer read GetFieldGroupIndex;
    property GroupingItemCount: Integer read GetGroupingItemCount;
    property GroupingItemIndex[Index: Integer]: Integer read GetGroupingItemIndex;
    property ItemGroupIndex[ItemIndex: Integer]: Integer read GetItemGroupIndex;
    // Navigation
    property DataGroupIndexByRowIndex[RowIndex: Integer]: TcxDataGroupIndex read GetDataGroupIndexByRowIndex;
    property Level[ADataGroupIndex: TcxDataGroupIndex]: Integer read GetLevel;
    property ChildCount[DataGroupIndex: TcxDataGroupIndex]: Integer read GetChildCount; // for Level = 0 DataGroupIndex = -1
    property ChildDataGroupIndex[ParentDataGroupIndex: TcxDataGroupIndex; ChildIndex: Integer]: TcxDataGroupIndex read GetChildDataGroupIndex;
    property ChildRecordIndex[ParentDataGroupIndex: TcxDataGroupIndex; ChildIndex: Integer]: Integer read GetChildRecordIndex;
    property ParentDataGroupIndex[ChildDataGroupIndex: TcxDataGroupIndex]: TcxDataGroupIndex read GetParentDataGroupIndex;
    // Values
    property GroupDisplayTexts[ADataGroupIndex: TcxDataGroupIndex]: string read GetGroupDisplayText;
    property GroupValues[ADataGroupIndex: TcxDataGroupIndex]: Variant read GetGroupValue;
  end;

  { Summary }

  TcxCustomDataSummaryItem = class(TCollectionItem)
  private
    FField: TcxCustomDataField;
    function GetItemLink: TObject;
    procedure SetItemLink(Value: TObject);
  protected
    function GetDataController: TcxCustomDataController; virtual; abstract;
    procedure ItemLinkChanging(AField: TcxCustomDataField); virtual;
  public
    procedure Assign(Source: TPersistent); override;
    procedure BeginUpdate;
    procedure EndUpdate;
    property DataController: TcxCustomDataController read GetDataController;
    property ItemLink: TObject read GetItemLink write SetItemLink;
    property Field: TcxCustomDataField read FField;
  end;

  TcxSummaryKind = (skNone, skSum, skMin, skMax, skCount, skAverage);
  TcxSummaryOption = (soNullIgnore, soSelectedRecords, soMultipleSelectedRecords);
  TcxSummaryOptions = set of TcxSummaryOption;
  TcxSummaryPosition = (spGroup, spFooter);

  TcxSummaryProperty = (spFormat, spKind, spSorted);
  TcxSummaryProperties = set of TcxSummaryProperty;

  TcxSummaryValueType = (svtFloat, svtCurrency, svtDate);

  TcxDataSummaryItemGetTextEvent = procedure(Sender: TcxDataSummaryItem;
    const AValue: Variant; AIsFooter: Boolean; var AText: string) of object;

  TcxDataSummaryItem = class(TcxCustomDataSummaryItem)
  private
    FFormat: string;
    FKind: TcxSummaryKind;
    FSorted: Boolean;
    FOnGetText: TcxDataSummaryItemGetTextEvent;
    function GetPosition: TcxSummaryPosition;
    function GetSummaryItems: TcxDataSummaryItems;
    procedure SetFormat(const Value: string);
    procedure SetKind(Value: TcxSummaryKind);
    procedure SetPosition(Value: TcxSummaryPosition);
    procedure SetSorted(Value: Boolean);
  protected
    FPosition: TcxSummaryPosition;
    function GetDataController: TcxCustomDataController; override;
    function GetValueType(AVarType: TVarType): TcxSummaryValueType;
    function IsCurrency(AVarType: TVarType): Boolean; virtual;
    function IsDataBinded: Boolean; virtual;
    function IsPositionStored: Boolean; virtual;
  public
    destructor Destroy; override;
    procedure Assign(Source: TPersistent); override;
    function DataField: TcxCustomDataField; virtual;
    function FormatValue(const AValue: Variant; AIsFooter: Boolean): string; virtual;
    property DataController: TcxCustomDataController read GetDataController;
    property SummaryItems: TcxDataSummaryItems read GetSummaryItems;
    property Sorted: Boolean read FSorted write SetSorted default False;
  published
    property Format: string read FFormat write SetFormat;
    property Kind: TcxSummaryKind read FKind write SetKind default skNone;
    property Position: TcxSummaryPosition read GetPosition write SetPosition stored IsPositionStored;
    property OnGetText: TcxDataSummaryItemGetTextEvent read FOnGetText write FOnGetText;
  end;                    

  TcxDataSummaryItemClass = class of TcxDataSummaryItem;

  TcxSummaryEventArguments = record
    RecordIndex: Integer;
    SummaryItem: TcxDataSummaryItem;
  end;

  TcxSummaryEventOutArguments = record
    Value: Variant;
    SummaryValue: Variant;
    CountValue: Integer;
    Done: Boolean;
  end;

  TcxSummaryEvent = procedure(ASender: TcxDataSummaryItems;
    Arguments: TcxSummaryEventArguments;
    var OutArguments: TcxSummaryEventOutArguments) of object;

  TcxDataSummaryItems = class(TcxCollection)
  private
    FSummary: TcxDataSummary;
    FOnSummary: TcxSummaryEvent;
    function GetDataController: TcxCustomDataController;
    function GetItem(Index: Integer): TcxDataSummaryItem;
    procedure SetItem(Index: Integer; Value: TcxDataSummaryItem);
  protected
    procedure BeforeSortingChange(AItem: TcxDataSummaryItem; AValue: Boolean); virtual;
    procedure ChangedView;
    function GetItemPosition(AItem: TcxDataSummaryItem): TcxSummaryPosition; virtual;
    function GetOwner: TPersistent; override;
    function IndexOfField(AField: TcxCustomDataField): Integer;
    function IsPositionStored(AItem: TcxDataSummaryItem): Boolean; virtual;
    function ItemOfField(AField: TcxCustomDataField): TcxDataSummaryItem;
    procedure Update(Item: TCollectionItem); override;
    // simple summary routines
    function AddDataItem(AItemIndex: Integer; APosition: TcxSummaryPosition): TcxDataSummaryItem;
    procedure CheckItemEmpty(AItem: TcxDataSummaryItem);
    procedure GetDataItemProperties(AItemIndex: Integer; APosition: TcxSummaryPosition;
      AProperties: TcxSummaryProperties; var AFormat: string; var AKind: TcxSummaryKind;
      var ASorted: Boolean);
    function IsPropertiesEmpty(AProperties: TcxSummaryProperties; const AFormat: string;
      AKind: TcxSummaryKind; ASorted: Boolean): Boolean; virtual;
    procedure SetDataItemProperties(AItemIndex: Integer; APosition: TcxSummaryPosition;
      AProperties: TcxSummaryProperties; const AFormat: string; AKind: TcxSummaryKind;
      ASorted: Boolean);
    procedure SetItemProperties(AItem: TcxDataSummaryItem; APosition: TcxSummaryPosition;
      AProperties: TcxSummaryProperties; const AFormat: string; AKind: TcxSummaryKind;
      ASorted: Boolean);
  public
    constructor Create(ASummary: TcxDataSummary; AItemClass: TcxDataSummaryItemClass); virtual;
    function Add: TcxDataSummaryItem; overload;
    function Add(AItemLink: TObject; APosition: TcxSummaryPosition;
      AKind: TcxSummaryKind; const AFormat: string = ''): TcxDataSummaryItem; overload;
    procedure Assign(Source: TPersistent); override;
    procedure AssignEvents(Source: TPersistent); virtual;
    function DefaultFormat(AValueType: TcxSummaryValueType; ASummaryKind: TcxSummaryKind; AIsFooter: Boolean): string; virtual;
    procedure DeleteItems(AItemLink: TObject; APosition: TcxSummaryPosition);
    function GetGroupText(const ASummaryValues: Variant): string; virtual;
    function IndexOf(AItem: TcxDataSummaryItem): Integer;
    function IndexOfItemLink(AItemLink: TObject): Integer;
    function ItemOfItemLink(AItemLink: TObject): TcxDataSummaryItem;
    // simple summary
    function GetDataItem(AItemIndex: Integer; APosition: TcxSummaryPosition;
      ACheckKind: Boolean = False; AKind: TcxSummaryKind = skNone): TcxDataSummaryItem; virtual;
    function GetDataItemFormat(AItemIndex: Integer; APosition: TcxSummaryPosition): string;
    function GetDataItemKind(AItemIndex: Integer; APosition: TcxSummaryPosition): TcxSummaryKind;
    function GetDataItemSorted(AItemIndex: Integer; APosition: TcxSummaryPosition): Boolean;
    procedure SetDataItemFormat(AItemIndex: Integer; APosition: TcxSummaryPosition; const Value: string);
    procedure SetDataItemKind(AItemIndex: Integer; APosition: TcxSummaryPosition; Value: TcxSummaryKind);
    procedure SetDataItemSorted(AItemIndex: Integer; APosition: TcxSummaryPosition; Value: Boolean);

    property DataController: TcxCustomDataController read GetDataController;
    property Items[Index: Integer]: TcxDataSummaryItem read GetItem write SetItem; default;
    property Summary: TcxDataSummary read FSummary;
  published
    property OnSummary: TcxSummaryEvent read FOnSummary write FOnSummary;
  end;

  TcxDataFooterSummaryItems = class(TcxDataSummaryItems)
  protected
    function GetItemPosition(AItem: TcxDataSummaryItem): TcxSummaryPosition; override;
    function IsPositionStored(AItem: TcxDataSummaryItem): Boolean; override;
  end;

  TcxDataGroupSummaryItems = class(TcxDataSummaryItems)
  private
    FBeginText: string;
    FEndText: string;
    FSeparator: string;
    FOwner: TPersistent;
    function IsBeginTextStored: Boolean;
    function IsEndTextStored: Boolean;
    function IsSeparatorStored: Boolean;
    procedure SetBeginText(const Value: string);
    procedure SetEndText(const Value: string);
    procedure SetSeparator(const Value: string);
  protected
    procedure BeforeSortingChange(AItem: TcxDataSummaryItem; AValue: Boolean); override;
    function GetOwner: TPersistent; override;
  public
    constructor Create(ASummary: TcxDataSummary; AItemClass: TcxDataSummaryItemClass); override;
    procedure Assign(Source: TPersistent); override;
    function GetGroupText(const ASummaryValues: Variant): string; override;
    function SortedSummaryItem: TcxDataSummaryItem;
  published
    property BeginText: string read FBeginText write SetBeginText stored IsBeginTextStored;
    property EndText: string read FEndText write SetEndText stored IsEndTextStored;
    property Separator: string read FSeparator write SetSeparator stored IsSeparatorStored;
  end;

  TcxDataSummaryGroupItemLink = class(TcxCustomDataSummaryItem)
  private
    function GetSummaryGroupItemLinks: TcxDataSummaryGroupItemLinks;
  protected
    function GetDataController: TcxCustomDataController; override;
    procedure ItemLinkChanging(AField: TcxCustomDataField); override;
  public
    property SummaryGroupItemLinks: TcxDataSummaryGroupItemLinks read GetSummaryGroupItemLinks;
  end;

  TcxDataSummaryGroupItemLinkClass = class of TcxDataSummaryGroupItemLink;

  TcxDataSummaryGroupItemLinks = class(TcxCollection)
  private
    FSummaryGroup: TcxDataSummaryGroup;
    function GetItem(Index: Integer): TcxDataSummaryGroupItemLink;
    procedure SetItem(Index: Integer; Value: TcxDataSummaryGroupItemLink);
  protected
    function GetOwner: TPersistent; override;
    function IndexOfField(AField: TcxCustomDataField): Integer;
    function ItemOfField(AField: TcxCustomDataField): TcxDataSummaryGroupItemLink;
    procedure Update(Item: TCollectionItem); override;
  public
    constructor Create(ASummaryGroup: TcxDataSummaryGroup; AItemClass: TcxDataSummaryGroupItemLinkClass); virtual;

⌨️ 快捷键说明

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