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

📄 gridmodedemomain.pas

📁 DevExpress ExpressQuantumGrid Suite v5.9 Full Source
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit GridModeDemoMain;

interface

{$I ..\..\cxVer.inc}

uses
  Windows, Messages, SysUtils
  {$IFDEF DELPHI6}
  , Variants
  {$ENDIF}
  , Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, cxGridLevel, cxGridCustomTableView, cxGridTableView,
  cxGridDBTableView, cxControls, cxGridCustomView, cxGrid, cxCustomData,
  ExtCtrls, ActnList, ImgList, Menus, ComCtrls, cxGridCustomPopupMenu,
  cxGridPopupMenu, cxStyles, cxGraphics, cxFilter, cxData, cxEdit, DB,
  cxDBData, cxClasses, Grids, DBGrids, cxLookAndFeelPainters, cxButtons, 
  cxDBLookupComboBox, DBTables, cxDataStorage, cxBlobEdit, cxSpinEdit,
  cxCheckBox, cxHyperLinkEdit, cxCurrencyEdit, cxCalendar, cxImageComboBox,
  cxCalc, cxLookAndFeels;

const
  DataPath = '..\..\Data\';
  CarsTableNames: array[0..2] of string = ('Customers','Orders','Cars');

type
  TGridModeDemoMainForm = class(TForm)
    mmMain: TMainMenu;
    miAbout: TMenuItem;
    miFile: TMenuItem;
    miOptions: TMenuItem;
    miExit: TMenuItem;
    sbMain: TStatusBar;
    Grid: TcxGrid;
    lvCars: TcxGridLevel;
    tvCars: TcxGridDBTableView;
    tvCarsTrademark: TcxGridDBColumn;
    tvCarsModel: TcxGridDBColumn;
    tvCarshp: TcxGridDBColumn;
    tvCarsliter: TcxGridDBColumn;
    tvCarscyl: TcxGridDBColumn;
    tvCarsTransmissSpeedCount: TcxGridDBColumn;
    tvCarsTransmissAutomatic: TcxGridDBColumn;
    tvCarsMPG_City: TcxGridDBColumn;
    tvCarsMPG_Highway: TcxGridDBColumn;
    tvCarsCategory: TcxGridDBColumn;
    tvCarsDescription: TcxGridDBColumn;
    tvCarsHyperlink: TcxGridDBColumn;
    tvCarsPicture: TcxGridDBColumn;
    tvCarsPrice: TcxGridDBColumn;
    lvOrders: TcxGridLevel;
    tvOrders: TcxGridDBTableView;
    tvOrdersCustomerID: TcxGridDBColumn;
    tvOrdersPurchaseDate: TcxGridDBColumn;
    tvOrdersPaymentType: TcxGridDBColumn;
    tvOrdersPaymentAmount: TcxGridDBColumn;
    lbDescription: TLabel;
    pnlPopulate: TPanel;
    btnPopulate: TcxButton;
    N1: TMenuItem;
    miCustomizeViews: TMenuItem;
    miCalculateSummaries: TMenuItem;
    miEnableSorting: TMenuItem;
    miEnableFiltering: TMenuItem;
    pnlProgress: TPanel;
    ProgressBar: TProgressBar;
    miRecreateDB: TMenuItem;
    LookAndFeelController: TcxLookAndFeelController;
    procedure miAboutClick(Sender: TObject);
    procedure miExitClick(Sender: TObject);
    procedure miCalculateSummariesClick(Sender: TObject);
    procedure miEnableSortingClick(Sender: TObject);
    procedure miEnableFilteringClick(Sender: TObject);
    procedure miRecreateDBClick(Sender: TObject);
    procedure tvDataControllerFilterGetValueList(
      Sender: TcxFilterCriteria; AItemIndex: Integer;
      AValueList: TcxDataFilterValueList);
    procedure tvDataControllerSortingChanged(Sender: TObject);
    procedure tvOrdersDataControllerSummaryAfterSummary(
      ASender: TcxDataSummary);
    procedure btnPopulateClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  public
    { Public declarations }
  private
    FStartIDValue, FEndIDValue: Integer;
    procedure tblOrdersPopulate;
    function GetSQLCondition(AView: TcxGridDBTableView; AAddFilter: Boolean): string;
    procedure InitPopulateButton;
    procedure OpenTables(AOpen: Boolean);
    procedure CopyDBToLocalPlace(ARewrite: Boolean);
  end;

var
  GridModeDemoMainForm: TGridModeDemoMainForm;

implementation

{$R *.dfm}

uses
  GridModeDemoData,
  cxGridDBDataDefinitions, GridModeDemoTerminate, AboutDemoForm;

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

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

procedure TGridModeDemoMainForm.miCalculateSummariesClick(
  Sender: TObject);
var
  AEnableSummaries: Boolean;
  AAfterSummaryEvent: TcxAfterSummaryEvent;

  procedure EnableCarsSummaries;
  begin
    tvCars.BeginUpdate;
    try
      tvCars.DataController.Summary.OnAfterSummary := AAfterSummaryEvent;
      tvCars.OptionsView.Footer := AEnableSummaries;
    finally
      tvCars.EndUpdate;
    end;
    tvCars.DataController.ClearDetails;
  end;

  procedure EnableOrdersSummaries;
  begin
    tvOrders.BeginUpdate;
    try
      tvOrders.DataController.Summary.OnAfterSummary := AAfterSummaryEvent;
      tvOrders.OptionsView.Footer := AEnableSummaries;
    finally
      tvOrders.EndUpdate;
    end;
  end;

begin
  with Sender as TMenuItem do
  begin
    Checked := not Checked;
    AEnableSummaries := Checked;
  end;
  if AEnableSummaries then
    AAfterSummaryEvent := tvOrdersDataControllerSummaryAfterSummary
  else
    AAfterSummaryEvent := nil;
  EnableOrdersSummaries;
  EnableCarsSummaries;
  if AEnableSummaries then
  begin
    tvCars.DataController.Summary.BeginUpdate;
    tvCars.DataController.Summary.EndUpdate;
  end;
end;

procedure TGridModeDemoMainForm.miEnableSortingClick(Sender: TObject);
var
  AEnableSorting: Boolean;
  ASortingChangedEvent: TNotifyEvent;

  procedure EnableSorting(AView: TcxGridDBTableView);
  begin
    AView.DataController.ClearSorting(False);
    AView.DataController.OnSortingChanged := ASortingChangedEvent;
    AView.OptionsCustomize.ColumnSorting := AEnableSorting;
  end;

begin
  with Sender as TMenuItem do
  begin
    Checked := not Checked;
    AEnableSorting := Checked;
  end;
  if AEnableSorting then
    ASortingChangedEvent := tvDataControllerSortingChanged
  else
    ASortingChangedEvent := nil;
  EnableSorting(tvOrders);
  EnableSorting(tvCars);
  tvCars.DataController.ClearDetails;
end;

procedure TGridModeDemoMainForm.miEnableFilteringClick(Sender: TObject);
var
  AEnableFiltering: Boolean;
begin
  with Sender as TMenuItem do
  begin
    Checked := not Checked;
    AEnableFiltering := Checked;
  end;
  if not tvOrders.DataController.Filter.IsEmpty then
    tvOrders.DataController.Filter.Clear;
  if not tvCars.DataController.Filter.IsEmpty then
    tvCars.DataController.Filter.Clear;
  tvOrders.OptionsCustomize.ColumnFiltering := AEnableFiltering;
  tvCars.OptionsCustomize.ColumnFiltering := AEnableFiltering;
  tvCars.DataController.ClearDetails;
end;

procedure TGridModeDemoMainForm.miRecreateDBClick(Sender: TObject);
begin
  CopyDBToLocalPlace(True);
end;

procedure TGridModeDemoMainForm.tvDataControllerFilterGetValueList(
  Sender: TcxFilterCriteria; AItemIndex: Integer;
  AValueList: TcxDataFilterValueList);
var
  AColumn: TcxGridDBColumn;
  ADataSet: TDataSet;
  AProperties: TcxLookupComboBoxProperties;
  AValue: Variant;
  AIsLookupColumn: Boolean;
begin
  ADataSet := TcxGridDBTableView(Grid.FocusedView).DataController.DataSet;
  AColumn := TcxGridDBTableView(Grid.FocusedView).Columns[AItemIndex];
  AIsLookupColumn := AColumn.PropertiesClass = TcxLookupComboBoxProperties;
  with GridModeDemoDataDM do
    try
      Screen.Cursor := crHourGlass;
      qryHelper.SQL.Clear;
      qryHelper.SQL.Add(
        'Select DISTINCT ' + AColumn.DataBinding.FieldName + ' From ' +
        GetTableNameByDataSet(ADataSet));
      qryHelper.SQL.Add(
        GetSQLCondition(TcxGridDBTableView(Grid.FocusedView), False));
      qryHelper.Open;
      qryHelper.First;
      while not qryHelper.Eof do
      begin
        AValue := qryHelper.Fields[0].Value;
        if AIsLookupColumn then
        begin
          AProperties := TcxLookupComboBoxProperties(AColumn.GetProperties);
          ADataSet := AProperties.ListSource.DataSet;
          AValue := ADataSet.Lookup(
            AProperties.KeyFieldNames,AValue, AProperties.ListFieldNames);
        end;
        if VarIsNull(AValue) then Exit;
        AValueList.Add(fviValue, qryHelper.Fields[0].Value, AValue, False);
        qryHelper.Next;
      end;
      qryHelper.Close;
    finally
      Screen.Cursor := crDefault;
    end;
end;

procedure TGridModeDemoMainForm.tvDataControllerSortingChanged(
  Sender: TObject);

  procedure SortClone;
    var
      AColumn: TcxGridDBColumn;
      AFieldName: string;
      I: Integer;
  begin
    with TcxGridDBDataController(Sender).GridView do
    begin
      if not PatternGridView.IsPattern then Exit;
      try
        BeginUpdate;
        TcxGridDBTableView(PatternGridView).BeginUpdate;
        TcxGridDBTableView(PatternGridView).DataController.ClearSorting(False);
        for I := 0 to SortedItemCount - 1 do
        begin
          AFieldName := TcxGridDBColumn(SortedItems[I]).DataBinding.FieldName;
          AColumn :=
            TcxGridDBTableView(PatternGridView).GetColumnByFieldName(AFieldName);
          if AColumn.SortOrder <> SortedItems[I].SortOrder then
           AColumn.SortOrder := SortedItems[I].SortOrder;
        end;
      finally
        TcxGridDBTableView(PatternGridView).EndUpdate;
        EndUpdate;
      end;
    end;

  end;

  procedure ApplySortToQuery(AQuery: TQuery; ASortArray: array of string);
  var
    I: Integer;
    ASortString: string;
  begin
    ASortString := '';
    for I := 0 to High(ASortArray) do
      ASortString := ASortString + ASortArray[I];
    Delete(ASortString, Length(ASortString)-1, 2);
    try
      AQuery.DisableControls;
      AQuery.Close;
      if ASortString <> '' then ASortString := 'order by ' + ASortString;
      if AQuery.SQL.Count > 1 then AQuery.SQL[1] := ASortString
      else AQuery.SQL.Add(ASortString);
    finally
      AQuery.Open;
      AQuery.EnableControls;
    end;
  end;

  procedure SortPattern;
  var
    I: Integer;
    AOrder, AFieldName: string;
    ASortArray: array of string;
  begin
    with TcxGridDBDataController(Sender).GridView do
    try

⌨️ 快捷键说明

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