⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 viewnestedbandsdemomain.pas

📁 DevExpress ExpressQuantumGrid Suite v5.9 Full Source
💻 PAS
字号:
unit ViewNestedBandsDemoMain;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, cxGridLevel, cxGridCustomTableView, cxGridTableView,
  cxGridDBTableView, cxControls, cxGridCustomView, cxGrid, cxCustomData,
  ExtCtrls, ActnList, ImgList, Menus, ComCtrls, cxGridCustomPopupMenu,
  cxGridPopupMenu, Grids, DBGrids,
  cxDBData, cxStyles, cxGraphics, cxFilter, cxData, cxEdit, DB, cxClasses,
  cxDataStorage, cxMRUEdit, cxButtonEdit, cxDropDownEdit, cxCheckBox,
  cxMaskEdit, cxDBLookupComboBox, cxTimeEdit, cxImageComboBox, cxSpinEdit,
  cxCalc, cxBlobEdit, cxImage, cxRadioGroup, cxMemo, cxHyperLinkEdit,
  cxLookAndFeels, cxGridBandedTableView, cxGridDBBandedTableView,
  cxCalendar;

type
  TViewNestedBandsDemoMainForm = class(TForm)
    mmMain: TMainMenu;
    miAbout: TMenuItem;
    miFile: TMenuItem;
    miOptions: TMenuItem;
    miExit: TMenuItem;
    sbMain: TStatusBar;
    Grid: TcxGrid;
    lbDescription: TLabel;
    LookAndFeelController: TcxLookAndFeelController;
    lvOrders: TcxGridLevel;
    bvOrders: TcxGridDBBandedTableView;
    clnCustomerID: TcxGridDBBandedColumn;
    clnOrdersProductID: TcxGridDBBandedColumn;
    clnPurchaseDate: TcxGridDBBandedColumn;
    clnPaymentType: TcxGridDBBandedColumn;
    clnQuantity: TcxGridDBBandedColumn;
    clnPaymentAmount: TcxGridDBBandedColumn;
    clnCustomerCompany: TcxGridDBBandedColumn;
    clnCustomerAddres: TcxGridDBBandedColumn;
    clnCustomerFax: TcxGridDBBandedColumn;
    clnCustomerPhone: TcxGridDBBandedColumn;
    clnCustomerOccupation: TcxGridDBBandedColumn;
    clnCustomerZipCode: TcxGridDBBandedColumn;
    clnCarCyl: TcxGridDBBandedColumn;
    clnCarHP: TcxGridDBBandedColumn;
    clnCarLiter: TcxGridDBBandedColumn;
    clnCarMPG_City: TcxGridDBBandedColumn;
    clnCarMPG_Highway: TcxGridDBBandedColumn;
    clnCarTransMissAuto: TcxGridDBBandedColumn;
    clnCarTransmissSpeedCount: TcxGridDBBandedColumn;
    miNestedBands: TMenuItem;
    N1: TMenuItem;
    miBandsQuickCustomization: TMenuItem;
    miColumnsQuickCustomization: TMenuItem;
    N2: TMenuItem;
    miCellMerging: TMenuItem;
    procedure miAboutClick(Sender: TObject);
    procedure miExitClick(Sender: TObject);
    procedure miNestedBandsClick(Sender: TObject);
    procedure miBandsQuickCustomizationClick(Sender: TObject);
    procedure miColumnsQuickCustomizationClick(Sender: TObject);
    procedure miCellMergingClick(Sender: TObject);
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  private
    FNestedBands: TList;
    procedure AddNestedBandInfo(ABand: TcxGridBand);
    procedure AdjustCellMerging(AUseCelMerging: Boolean);
    procedure AdjustNestedBands(AUseNestedBands: Boolean);
    procedure ChangeBandVisibility(AIndex: Integer; AVisible: Boolean);
    procedure HideNestedBands;
    procedure ReleaseNestedBandInfos;
    procedure ShowNestedBands;
  end;

var
  ViewNestedBandsDemoMainForm: TViewNestedBandsDemoMainForm;

implementation

uses
  AboutDemoForm, ViewNestedBandsDemoData;

{$R *.dfm}

type
  TcxNestedBandInfo = class
  private
    FBand, FParentBand: TcxGridBand;
    FColumnIndex: Integer;
    FCaption: TCaption;
  public
    constructor Create(ABand: TcxGridBand);
    procedure RestoreBand;
    property Band: TcxGridBand read FBand;
    property Caption: TCaption read FCaption;
    property ColumnIndex: Integer read FColumnIndex;
    property ParentBand: TcxGridBand read FParentBand;
  end;

constructor TcxNestedBandInfo.Create(ABand: TcxGridBand);
begin
  inherited Create;
  FBand := ABand;
  FParentBand := ABand.Bands[ABand.Position.BandIndex];
  FCaption := ABand.Caption;
  FColumnIndex := ABand.Position.ColIndex;
end;

procedure TcxNestedBandInfo.RestoreBand;
begin
  FBand.Caption := FCaption;
  FBand.Position.BandIndex := FParentBand.Index;
  FBand.Position.ColIndex := FColumnIndex;
end;

procedure TViewNestedBandsDemoMainForm.miAboutClick(Sender: TObject);
begin
  ShowAboutDemoForm;
end;

procedure TViewNestedBandsDemoMainForm.miExitClick(Sender: TObject);
begin
  Close;
end;

constructor TViewNestedBandsDemoMainForm.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FNestedBands := TList.Create;
end;

destructor TViewNestedBandsDemoMainForm.Destroy;
begin
  inherited Destroy;
  ReleaseNestedBandInfos;
  FNestedBands.Free;
end;

procedure TViewNestedBandsDemoMainForm.AddNestedBandInfo(ABand: TcxGridBand);
begin
  FNestedBands.Add(TcxNestedBandInfo.Create(ABand));
end;

procedure TViewNestedBandsDemoMainForm.AdjustCellMerging(AUseCelMerging: Boolean);
begin
  bvOrders.BeginUpdate;
  try
    clnCustomerID.Options.CellMerging := AUseCelMerging;
    clnOrdersProductID.Options.CellMerging := AUseCelMerging;
    clnPurchaseDate.Options.CellMerging := AUseCelMerging;
    clnPaymentType.Options.CellMerging := AUseCelMerging;
    clnCustomerCompany.Options.CellMerging := AUseCelMerging;
    clnCustomerAddres.Options.CellMerging := AUseCelMerging;
    clnCustomerFax.Options.CellMerging := AUseCelMerging;
    clnCustomerPhone.Options.CellMerging := AUseCelMerging;
    clnCustomerOccupation.Options.CellMerging := AUseCelMerging;
    clnCustomerZipCode.Options.CellMerging := AUseCelMerging;
    clnCarCyl.Options.CellMerging := AUseCelMerging;
    clnCarHP.Options.CellMerging := AUseCelMerging;
    clnCarLiter.Options.CellMerging := AUseCelMerging;
    clnCarMPG_City.Options.CellMerging := AUseCelMerging;
    clnCarMPG_Highway.Options.CellMerging := AUseCelMerging;
    clnCarTransMissAuto.Options.CellMerging := AUseCelMerging;
    clnCarTransmissSpeedCount.Options.CellMerging := AUseCelMerging;
  finally
    bvOrders.EndUpdate;
  end;
end;

procedure TViewNestedBandsDemoMainForm.AdjustNestedBands(AUseNestedBands: Boolean);
begin
  if AUseNestedBands then
    ShowNestedBands
  else
    HideNestedBands;
end;

procedure TViewNestedBandsDemoMainForm.ChangeBandVisibility(AIndex: Integer;
  AVisible: Boolean);
begin
  bvOrders.Bands[AIndex].Visible := AVisible;
end;

procedure TViewNestedBandsDemoMainForm.HideNestedBands;
var
  I: Integer;
begin
  ReleaseNestedBandInfos;
  bvOrders.BeginUpdate;
  try
    for I := 0 to bvOrders.Bands.Count - 1 do
      if bvOrders.Bands[I].Position.BandIndex <> -1 then
      begin
        AddNestedBandInfo(bvOrders.Bands[I]);
        ChangeBandVisibility(bvOrders.Bands[I].Position.BandIndex, False);
        bvOrders.Bands[I].Caption :=
          bvOrders.Bands[bvOrders.Bands[I].Position.BandIndex].Caption + '''s ' +
            bvOrders.Bands[I].Caption;
        bvOrders.Bands[I].Position.BandIndex := -1;
      end
   finally
     bvOrders.EndUpdate;
   end;
end;

procedure TViewNestedBandsDemoMainForm.ReleaseNestedBandInfos;
var
  I: Integer;
begin
  for I := 0 to FNestedBands.Count - 1 do
    if TObject(FNestedBands[I]) is TcxNestedBandInfo then
      TcxNestedBandInfo(FNestedBands[I]).Free;
  FNestedBands.Clear;
end;

procedure TViewNestedBandsDemoMainForm.ShowNestedBands;
var
  I: Integer;
begin
  bvOrders.BeginUpdate;
  try
    for I := 0 to FNestedBands.Count - 1 do
      if TObject(FNestedBands[I]) is TcxNestedBandInfo then
      begin
        TcxNestedBandInfo(FNestedBands[I]).RestoreBand;
        ChangeBandVisibility(TcxNestedBandInfo(FNestedBands[I]).ParentBand.Index, True);
      end;
    ReleaseNestedBandInfos;
  finally
    bvOrders.EndUpdate;
  end;
end;

procedure TViewNestedBandsDemoMainForm.miNestedBandsClick(Sender: TObject);
begin
  TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked;
  AdjustNestedBands(TMenuItem(Sender).Checked);
  bvOrders.OptionsCustomize.NestedBands := TMenuItem(Sender).Checked;
end;

procedure TViewNestedBandsDemoMainForm.miBandsQuickCustomizationClick(
  Sender: TObject);
begin
  TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked;
  bvOrders.OptionsCustomize.BandsQuickCustomization := TMenuItem(Sender).Checked;
end;

procedure TViewNestedBandsDemoMainForm.miColumnsQuickCustomizationClick(
  Sender: TObject);
begin
  TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked;
  bvOrders.OptionsCustomize.ColumnsQuickCustomization := TMenuItem(Sender).Checked;
end;

procedure TViewNestedBandsDemoMainForm.miCellMergingClick(Sender: TObject);
begin
  TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked;
  AdjustCellMerging(TMenuItem(Sender).Checked);
end;

end.

⌨️ 快捷键说明

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