git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@31 05c56307-c608-d34a-929d-697000501d7a
191 lines
6.1 KiB
ObjectPascal
191 lines
6.1 KiB
ObjectPascal
unit ChartDataDrillingDemoMain;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
|
|
Dialogs, DB, DBTables, Menus, StdCtrls, cxStyles, cxCustomData, cxGraphics,
|
|
cxFilter, cxData, cxDataStorage, cxEdit, cxDBData, cxGridLevel, cxClasses,
|
|
cxControls, cxGridCustomView, cxGridCustomTableView, cxGridTableView,
|
|
cxGridDBTableView, cxGrid, cxGridChartView, cxGridDBChartView, cxTextEdit;
|
|
|
|
type
|
|
TfrmMain = class(TForm)
|
|
Label1: TLabel;
|
|
mmMain: TMainMenu;
|
|
miFile: TMenuItem;
|
|
miExit: TMenuItem;
|
|
miAbout: TMenuItem;
|
|
dbMain: TDatabase;
|
|
dsOrders: TDataSource;
|
|
tblOrders: TTable;
|
|
GridLevelChart: TcxGridLevel;
|
|
Grid: TcxGrid;
|
|
tblCustomers: TTable;
|
|
tblProducts: TTable;
|
|
tblOrdersID: TAutoIncField;
|
|
tblOrdersCustomerID: TIntegerField;
|
|
tblOrdersProductID: TIntegerField;
|
|
tblOrdersPurchaseDate: TDateTimeField;
|
|
tblOrdersTime: TDateTimeField;
|
|
tblOrdersPaymentType: TStringField;
|
|
tblOrdersPaymentAmount: TCurrencyField;
|
|
tblOrdersDescription: TMemoField;
|
|
tblOrdersQuantity: TIntegerField;
|
|
tblOrdersCustomer: TStringField;
|
|
tblOrdersProduct: TStringField;
|
|
ChartView: TcxGridDBChartView;
|
|
ChartViewSeriesPaymentAmount: TcxGridDBChartSeries;
|
|
ChartViewDataGroupProduct: TcxGridDBChartDataGroup;
|
|
GridLevelTable: TcxGridLevel;
|
|
TableView: TcxGridDBTableView;
|
|
ChartViewDataGroupPaymentType: TcxGridDBChartDataGroup;
|
|
ChartViewDataGroupCustomer: TcxGridDBChartDataGroup;
|
|
ChartViewDataGroupPurchaseDate: TcxGridDBChartDataGroup;
|
|
ChartViewSeriesQuantity: TcxGridDBChartSeries;
|
|
ChartViewSeriesCount: TcxGridDBChartSeries;
|
|
TableViewPurchaseDate: TcxGridDBColumn;
|
|
TableViewPaymentType: TcxGridDBColumn;
|
|
TableViewPaymentAmount: TcxGridDBColumn;
|
|
TableViewQuantity: TcxGridDBColumn;
|
|
TableViewCustomer: TcxGridDBColumn;
|
|
TableViewProduct: TcxGridDBColumn;
|
|
TableViewOrderCount: TcxGridDBColumn;
|
|
StyleRepository: TcxStyleRepository;
|
|
styleActiveGroup: TcxStyle;
|
|
procedure miExitClick(Sender: TObject);
|
|
procedure miAboutClick(Sender: TObject);
|
|
procedure GridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel);
|
|
procedure TableViewStylesGetGroupStyle(Sender: TcxGridTableView;
|
|
ARecord: TcxCustomGridRecord; ALevel: Integer; out AStyle: TcxStyle);
|
|
protected
|
|
ActiveDataGroups: array of Integer;
|
|
function GetColumnByChartItem(AChartItem: TcxGridChartItem): TcxGridDBColumn;
|
|
procedure ShowTableActiveGroup;
|
|
procedure SynchronizeTableWithChart;
|
|
procedure UpdateTableGroupingAndColumnVisibility;
|
|
end;
|
|
|
|
var
|
|
frmMain: TfrmMain;
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
uses
|
|
AboutDemoForm;
|
|
|
|
function TfrmMain.GetColumnByChartItem(AChartItem: TcxGridChartItem): TcxGridDBColumn;
|
|
begin
|
|
Result := TableView.GetColumnByFieldName(TcxGridDBChartItemDataBinding(AChartItem.DataBinding).FieldName);
|
|
end;
|
|
|
|
procedure TfrmMain.ShowTableActiveGroup;
|
|
var
|
|
I, ADataGroupIndex, AGroupRowIndex: Integer;
|
|
ARow: TcxCustomGridRow;
|
|
begin
|
|
// expand group rows so that the group with the active chart data is made visible
|
|
SetLength(ActiveDataGroups, ChartView.ActiveDataLevel);
|
|
TableView.BeginUpdate;
|
|
try
|
|
TableView.DataController.Groups.FullCollapse;
|
|
ADataGroupIndex := -1;
|
|
for I := 0 to ChartView.ActiveDataLevel - 1 do
|
|
begin
|
|
ADataGroupIndex := TableView.DataController.Groups.GetDataGroupIndexByGroupValue(
|
|
ADataGroupIndex, ChartView.VisibleDataGroups[I].ActiveValue);
|
|
ActiveDataGroups[I] := ADataGroupIndex;
|
|
|
|
AGroupRowIndex := TableView.DataController.DataControllerInfo.DataGroups[ADataGroupIndex].RowIndex;
|
|
TableView.DataController.Groups.ChangeExpanding(AGroupRowIndex, True, False);
|
|
TableView.Controller.FocusedRowIndex := AGroupRowIndex;
|
|
end;
|
|
finally
|
|
TableView.EndUpdate;
|
|
end;
|
|
// select rows with the data used for the active chart
|
|
TableView.BeginUpdate;
|
|
try
|
|
if ADataGroupIndex = -1 then
|
|
TableView.Controller.SelectAll
|
|
else
|
|
begin
|
|
TableView.Controller.ClearSelection;
|
|
for I := TableView.Controller.FocusedRowIndex + 1 to TableView.ViewData.RowCount - 1 do
|
|
begin
|
|
ARow := TableView.ViewData.Rows[I];
|
|
if ARow.Level = ChartView.ActiveDataLevel then
|
|
begin
|
|
ARow.Focused := True;
|
|
ARow.Selected := True;
|
|
end
|
|
else
|
|
Break;
|
|
end;
|
|
end;
|
|
finally
|
|
TableView.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmMain.SynchronizeTableWithChart;
|
|
begin
|
|
UpdateTableGroupingAndColumnVisibility;
|
|
ShowTableActiveGroup;
|
|
end;
|
|
|
|
procedure TfrmMain.TableViewStylesGetGroupStyle(Sender: TcxGridTableView;
|
|
ARecord: TcxCustomGridRecord; ALevel: Integer; out AStyle: TcxStyle);
|
|
var
|
|
ADataGroupIndex, I: Integer;
|
|
begin
|
|
if ARecord = nil then Exit;
|
|
ADataGroupIndex := TableView.DataController.Groups.DataGroupIndexByRowIndex[ARecord.Index];
|
|
for I := 0 to Length(ActiveDataGroups) - 1 do
|
|
if ADataGroupIndex = ActiveDataGroups[I] then
|
|
begin
|
|
AStyle := styleActiveGroup;
|
|
Break;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmMain.UpdateTableGroupingAndColumnVisibility;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
TableView.BeginUpdate;
|
|
try
|
|
TableView.Controller.ClearGrouping;
|
|
for I := 0 to ChartView.VisibleDataGroupCount - 1 do
|
|
GetColumnByChartItem(ChartView.VisibleDataGroups[I]).GroupIndex := I;
|
|
|
|
for I := 0 to ChartView.DataGroupCount - 1 do
|
|
GetColumnByChartItem(ChartView.DataGroups[I]).Visible := ChartView.DataGroups[I].Visible;
|
|
for I := 0 to ChartView.SeriesCount - 1 do
|
|
GetColumnByChartItem(ChartView.Series[I]).Visible := ChartView.Series[I].Visible;
|
|
finally
|
|
TableView.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmMain.GridActiveTabChanged(Sender: TcxCustomGrid;
|
|
ALevel: TcxGridLevel);
|
|
begin
|
|
if ALevel = GridLevelTable then
|
|
SynchronizeTableWithChart;
|
|
end;
|
|
|
|
procedure TfrmMain.miAboutClick(Sender: TObject);
|
|
begin
|
|
ShowAboutDemoForm;
|
|
end;
|
|
|
|
procedure TfrmMain.miExitClick(Sender: TObject);
|
|
begin
|
|
Close;
|
|
end;
|
|
|
|
end.
|