クイックスタート
A Pivot Table in a Few Lines
The same API in Delphi, C++ Builder and C#: load 100,000 rows once, then lay out regions by quarter with the largest region first.
A VCL form with a pivot grid and a field list: 100,000 rows loaded with one recalculation, regions by quarter, largest region first.
unit frmSales;
interface
uses
Classes, Controls, Forms, SysUtils,
sgcUICore_Theme, sgcPivotGrid_Types, sgcPivotGrid_Fields, sgcPivotGrid_VCL,
sgcPivotGrid_FieldList_VCL;
type
TFormSales = class(TForm)
procedure FormCreate(Sender: TObject);
end;
implementation
procedure TFormSales.FormCreate(Sender: TObject);
const
Regions: array[0..3] of string = ('North', 'South', 'East', 'West');
var
vGrid: TsgcVCLPivotGrid;
vList: TsgcVCLPivotFieldList;
vField: TsgcPivotField;
i: Integer;
begin
vGrid := TsgcVCLPivotGrid.Create(Self);
vGrid.Parent := Self;
vGrid.Align := alClient;
vGrid.Theme := utDark;
vList := TsgcVCLPivotFieldList.Create(Self);
vList.Parent := Self;
vList.Align := alRight;
vList.PivotGrid := vGrid;
// load 100,000 rows, one recalculation at EndLoad
vGrid.Pivot.BeginLoad(True);
try
vGrid.Pivot.DefineColumn('Region', pvtText);
vGrid.Pivot.DefineColumn('Date', pvtDateTime);
vGrid.Pivot.DefineColumn('Sales', pvtFloat);
for i := 1 to 100000 do
vGrid.Pivot.AppendRow([Regions[i mod 4], EncodeDate(2025, 1, 1) + i mod 365,
10 + (i mod 97) * 1.5]);
finally
vGrid.Pivot.EndLoad;
end;
// layout: regions by quarter, the largest region first, shown as % of total
vGrid.Pivot.BeginUpdate;
try
vField := vGrid.Pivot.AddField('Region', pvaRow);
vField.SortBy := pvsValue;
vField.SortOrder := pvoDescending;
vGrid.Pivot.AddField('Date', pvaColumn, pvdQuarter).Caption := 'Quarter';
vField := vGrid.Pivot.AddDataField('Sales', pvfSum);
vField.ShowAs := pvwPercentOfGrandTotal;
finally
vGrid.Pivot.EndUpdate;
end;
vGrid.SaveToHTML(ExtractFilePath(ParamStr(0)) + 'sales.html');
end;
end.
ヘルプのトピックを読む →
The same pivot in C++ Builder, with the headers that the packages generate.
#include <vcl.h>
#pragma hdrstop
#include "sgcUICore_Theme.hpp"
#include "sgcPivotGrid_Types.hpp"
#include "sgcPivotGrid_Fields.hpp"
#include "sgcPivotGrid_VCL.hpp"
#include "sgcPivotGrid_FieldList_VCL.hpp"
void __fastcall BuildSalesPivot(TForm *Form)
{
TsgcVCLPivotGrid *vGrid = new TsgcVCLPivotGrid(Form);
vGrid->Parent = Form;
vGrid->Align = alClient;
vGrid->Theme = utDark;
TsgcVCLPivotFieldList *vList = new TsgcVCLPivotFieldList(Form);
vList->Parent = Form;
vList->Align = alRight;
vList->PivotGrid = vGrid;
// load 100,000 rows, one recalculation at EndLoad
static const String Regions[4] = {"North", "South", "East", "West"};
Variant vValues[3];
vGrid->Pivot->BeginLoad(true);
try {
vGrid->Pivot->DefineColumn("Region", pvtText);
vGrid->Pivot->DefineColumn("Date", pvtDateTime);
vGrid->Pivot->DefineColumn("Sales", pvtFloat);
for (int i = 1; i <= 100000; i++) {
vValues[0] = Regions[i % 4];
vValues[1] = TDateTime((double)EncodeDate(2025, 1, 1) + i % 365);
vValues[2] = 10 + (i % 97) * 1.5;
vGrid->Pivot->AppendRow(vValues, 2);
}
}
__finally {
vGrid->Pivot->EndLoad();
}
// layout: regions by quarter, the largest region first, shown as % of total
vGrid->Pivot->BeginUpdate();
try {
TsgcPivotField *vField = vGrid->Pivot->AddField("Region", pvaRow);
vField->SortBy = pvsValue;
vField->SortOrder = pvoDescending;
vGrid->Pivot->AddField("Date", pvaColumn, pvdQuarter)->Caption = "Quarter";
vField = vGrid->Pivot->AddDataField("Sales", pvfSum);
vField->ShowAs = pvwPercentOfGrandTotal;
}
__finally {
vGrid->Pivot->EndUpdate();
}
vGrid->SaveToHTML(ExtractFilePath(ParamStr(0)) + "sales.html");
}
ヘルプのトピックを読む →
The C# version for WinForms. It uses only features of the free Community edition.
using System;
using System.Windows.Forms;
using esegece.sgcPivotGrid;
using esegece.sgcUICore;
namespace SalesPivot
{
internal class MainForm : Form
{
private static readonly string[] Regions = { "North", "South", "East", "West" };
public MainForm()
{
Text = "Sales pivot";
var grid = new TsgcWinFormsPivotGrid { Dock = DockStyle.Fill, Theme = TsgcUITheme.utDark };
var list = new TsgcWinFormsPivotFieldList { Dock = DockStyle.Right, Width = 260, PivotGrid = grid, Theme = TsgcUITheme.utDark };
Controls.Add(grid);
Controls.Add(list);
// load 100,000 rows, one recalculation at EndLoad
grid.Pivot.BeginLoad();
try
{
grid.Pivot.DefineColumn("Region", TsgcPivotDataType.pvtText);
grid.Pivot.DefineColumn("Date", TsgcPivotDataType.pvtDateTime);
grid.Pivot.DefineColumn("Sales", TsgcPivotDataType.pvtFloat);
for (int i = 1; i <= 100000; i++)
grid.Pivot.AppendRow(Regions[i % 4], new DateTime(2025, 1, 1).AddDays(i % 365), 10 + (i % 97) * 1.5);
}
finally { grid.Pivot.EndLoad(); }
// layout: regions by quarter, the largest region first
grid.Pivot.BeginUpdate();
try
{
var region = grid.Pivot.AddField("Region", TsgcPivotArea.pvaRow);
region.SortBy = TsgcPivotSortBy.pvsValue;
region.SortOrder = TsgcPivotSortOrder.pvoDescending;
grid.Pivot.AddField("Date", TsgcPivotArea.pvaColumn, TsgcPivotDateGrouping.pvdQuarter).Caption = "Quarter";
grid.Pivot.AddDataField("Sales", TsgcPivotAggregation.pvfSum).DisplayFormat = "#,##0";
}
finally { grid.Pivot.EndUpdate(); }
grid.SaveToHTML("sales.html");
}
[STAThread]
static void Main() { Application.EnableVisualStyles(); Application.Run(new MainForm()); }
}
}
dotnet add package esegece.sgcPivotGrid.WinForms
ヘルプのトピックを読む →