📄 gridmodedemomain.pas
字号:
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 + -