filterdemomain.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 243 行

PAS
243
字号
unit FilterDemoMain;

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

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, DB, DBTables, StdCtrls, cxStyles, cxCustomData, cxGraphics,
  cxFilter, cxData, cxDataStorage, cxEdit, cxDBData, cxGridLevel, cxClasses,
  cxControls, cxGridCustomView, cxGridCustomTableView, cxGridTableView,
  cxGridDBTableView, cxGrid, cxDBLookupComboBox, cxEditRepositoryItems, ExtCtrls;

type
  TfrmMain = class(TForm)
    Label1: TLabel;
    dbMain: TDatabase;
    dsCompanies: TDataSource;
    tblCompanies: TTable;
    mmMain: TMainMenu;
    miFile: TMenuItem;
    miExit: TMenuItem;
    miAbout: TMenuItem;
    GridLevel1: TcxGridLevel;
    Grid: TcxGrid;
    tblCountries: TTable;
    tblCompaniesCOMPANYNAME: TStringField;
    tblCompaniesCOUNTRYID: TIntegerField;
    TableView: TcxGridTableView;
    TableViewCompany: TcxGridColumn;
    TableViewCountry: TcxGridColumn;
    TableViewOrderDate: TcxGridColumn;
    TableViewOrderID: TcxGridColumn;
    tblProducts: TTable;
    TableViewProduct: TcxGridColumn;
    TableViewQuantity: TcxGridColumn;
    tblProductsID: TAutoIncField;
    tblProductsName: TStringField;
    miView: TMenuItem;
    miColumnFilterPopupMultiSelect: TMenuItem;
    miApplyMultiSelectChanges: TMenuItem;
    N1: TMenuItem;
    miColumnFilterPopupFilteredList: TMenuItem;
    N2: TMenuItem;
    miFilterRow: TMenuItem;
    miApplyMultiSelectChangesImmediately: TMenuItem;
    miApplyMultiSelectChangesOnButtonClick: TMenuItem;
    miDateTimeFilters: TMenuItem;
    dsCountries: TDataSource;
    erMain: TcxEditRepository;
    erMainFlag: TcxEditRepositoryImageItem;
    miApplyFilterRowChanges: TMenuItem;
    miApplyFilterRowChangesOnCellExit: TMenuItem;
    miApplyFilterRowChangesImmediately: TMenuItem;
    miDateTimeFilterRelativeDays: TMenuItem;
    miDateTimeFilterRelativeDayPeriods: TMenuItem;
    miDateTimeFilterRelativeWeeks: TMenuItem;
    miDateTimeFilterRelativeMonths: TMenuItem;
    miDateTimeFilterRelativeYears: TMenuItem;
    miDateTimeFilterPastFuture: TMenuItem;
    miDateTimeFilterMonths: TMenuItem;
    miDateTimeFilterYears: TMenuItem;
    Panel1: TPanel;
    pnlMaskInfo: TPanel;
    procedure FormCreate(Sender: TObject);
    procedure miExitClick(Sender: TObject);
    procedure miAboutClick(Sender: TObject);
    procedure miColumnFilterPopupMultiSelectClick(Sender: TObject);
    procedure miApplyMultiSelectChangesClick(Sender: TObject);
    procedure miColumnFilterPopupFilteredListClick(Sender: TObject);
    procedure miFilterRowClick(Sender: TObject);
    procedure miApplyFilterRowChangesClick(Sender: TObject);
    procedure miDateTimeFilterClick(Sender: TObject);
  protected
    procedure GenerateData;
    function GetProductName(AID: Integer): string;
    procedure UpdateMenuValues;
  end;

var
  frmMain: TfrmMain;

implementation

uses
{$IFDEF DELPHI6}
  Variants,
{$ENDIF}
  AboutDemoForm;

{$R *.dfm}

procedure TfrmMain.GenerateData;
const
  OrdersPerCustomer = 25;
  DayRange = 3 * 365 div 2;
  MaxQuantity = 50;
var
  ADate: TDateTime;
  ACompanyName: string;
  ACountryID, I, ARecordIndex: Integer;
  ARow: TcxCustomGridRow;
begin
  ADate := Date;
  TableView.DataController.RecordCount := tblCompanies.RecordCount * OrdersPerCustomer;

  TableView.BeginUpdate;
  try
    tblCompanies.First;
    while not tblCompanies.Eof do
    begin
      ACompanyName := tblCompaniesCOMPANYNAME.AsString;
      ACountryID := tblCompaniesCOUNTRYID.AsInteger;

      for I := 0 to OrdersPerCustomer - 1 do
      begin
        ARecordIndex := (tblCompanies.RecNo - 1) * OrdersPerCustomer + I;
        ARow := TableView.ViewData.Rows[ARecordIndex];

        ARow.Values[TableViewCompany.Index] := ACompanyName;
        ARow.Values[TableViewCountry.Index] := ACountryID;
        ARow.Values[TableViewOrderDate.Index] := ADate + Random(DayRange) - DayRange div 2 + Random;
        ARow.Values[TableViewProduct.Index] := GetProductName(1 + Random(tblProducts.RecordCount));
        ARow.Values[TableViewQuantity.Index] := 1 + Random(MaxQuantity);
      end;
      tblCompanies.Next;
    end;
    TableViewOrderDate.SortOrder := soAscending;
  finally
    TableView.EndUpdate;
  end;

  TableView.BeginUpdate;
  try
    for I := 0 to TableView.ViewData.RowCount - 1 do
      TableView.ViewData.Rows[I].Values[TableViewOrderID.Index] := 1 + I;
  finally
    TableView.EndUpdate;
  end;
end;

function TfrmMain.GetProductName(AID: Integer): string;
begin
  if tblProducts.Locate('ID', AID, []) then
    Result := tblProductsName.AsString
  else
    Result := '';
end;

procedure TfrmMain.UpdateMenuValues;
var
  I: Integer;
begin
  miColumnFilterPopupMultiSelect.Checked := TableView.Filtering.ColumnPopup.MultiSelect;
  miApplyMultiSelectChanges.Enabled := TableView.Filtering.ColumnPopup.MultiSelect;
  if TableView.Filtering.ColumnPopup.ApplyMultiSelectChanges = fpacImmediately then
    miApplyMultiSelectChangesImmediately.Checked := True
  else
    miApplyMultiSelectChangesOnButtonClick.Checked := True;

  miColumnFilterPopupFilteredList.Checked := TableView.Filtering.ColumnFilteredItemsList;

  miFilterRow.Checked := TableView.FilterRow.Visible;
  miApplyFilterRowChanges.Enabled := TableView.FilterRow.Visible;
  if TableView.FilterRow.ApplyChanges = fracOnCellExit then
    miApplyFilterRowChangesOnCellExit.Checked := True
  else
    miApplyFilterRowChangesImmediately.Checked := True;

  for I := 0 to miDateTimeFilters.Count - 1 do
    miDateTimeFilters[I].Checked := TcxGridDateTimeFilter(I) in TableView.DateTimeHandling.Filters;
end;

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

procedure TfrmMain.miApplyFilterRowChangesClick(Sender: TObject);
begin
  TableView.FilterRow.ApplyChanges :=
    TcxGridFilterRowApplyChangesMode(TMenuItem(Sender).MenuIndex);
  UpdateMenuValues;
end;

procedure TfrmMain.miApplyMultiSelectChangesClick(Sender: TObject);
begin
  TableView.Filtering.ColumnPopup.ApplyMultiSelectChanges :=
    TcxGridItemFilterPopupApplyChangesMode(TMenuItem(Sender).MenuIndex);
  UpdateMenuValues;  
end;

procedure TfrmMain.miColumnFilterPopupFilteredListClick(Sender: TObject);
begin
  with TableView.Filtering do
    ColumnFilteredItemsList := not ColumnFilteredItemsList;
  UpdateMenuValues;  
end;

procedure TfrmMain.miColumnFilterPopupMultiSelectClick(Sender: TObject);
begin
  with TableView.Filtering.ColumnPopup do
    MultiSelect := not MultiSelect;
  UpdateMenuValues;  
end;

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

procedure TfrmMain.miFilterRowClick(Sender: TObject);
begin
  with TableView.FilterRow do
    Visible := not Visible;
  UpdateMenuValues;
end;

procedure TfrmMain.miDateTimeFilterClick(Sender: TObject);
var
  AFilter: TcxGridDateTimeFilter;
begin
  AFilter := TcxGridDateTimeFilter(TMenuItem(Sender).MenuIndex);
  with TableView.DateTimeHandling do
    if AFilter in Filters then
      Filters := Filters - [AFilter]
    else
      Filters := Filters + [AFilter];
  UpdateMenuValues;    
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  GenerateData;
  UpdateMenuValues;

  TableViewProduct.DataBinding.AddToFilter(nil, foLike, 'Express*');
  TableViewOrderDate.DataBinding.AddToFilter(nil, foThisMonth, Null);
  TableView.DataController.Filter.Active := True;
end;

end.

⌨️ 快捷键说明

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