UniGUI позволяет разбивать dataset на страницы, для этого нужно включить в свойствах грида WebOptions -> Paged := true
Выглядеть это может так
Предыдущий способ подсчета итоговых результатов не подойдет, потому что сумма будет посчитана только по тем записям, которые видны. Итак, что же делать в этом случае? Для этого нам их просто надо посчитать в другом месте, например так
procedure TMainForm.CalcTotals;
var
B : TBookmark;
begin
if not FInited then Exit;
ClientDataSet1.DisableControls;
B := ClientDataSet1.GetBookmark;
try
GTotal := 0;
GTotalPrice := 0.0;
ClientDataSet1.First;
while not ClientDataSet1.Eof do
begin
GTotal := GTotal + ClientDataSet1.FieldByName('Quantity').AsInteger;
GTotalPrice := GTotalPrice +
( ClientDataSet1.FieldByName('UnitPrice').AsFloat * ClientDataSet1.FieldByName('Quantity').AsInteger );
ClientDataSet1.Next;
end;
finally
ClientDataSet1.GotoBookmark(B);
ClientDataSet1.FreeBookmark(B);
ClientDataSet1.EnableControls;
end;
end;
А в OnColumnSummaryResult грида сделать следующее
procedure TMainForm.UniDBGrid1ColumnSummaryResult(Column: TUniDBGridColumn;
GroupFieldValue: Variant; Attribs: TUniCellAttribs; var Result: string);
begin
if SameText(Column.FieldName, 'quantity') then
begin
Result:=Format('Total Units: %d', [GTotal]);
Attribs.Font.Style:=[fsBold];
Attribs.Font.Color:=clGreen;
end
else if SameText(Column.FieldName, 'unitprice') then
begin
Result:='Total Cost: '+FormatCurr('0,0.00 ', GTotalPrice) + FmtSettings.CurrencyString;
Attribs.Font.Style:=[fsBold];
Attribs.Font.Color:=clNavy;
end;
end;
Где GTotal у нас объявлена как поле. Оно в принципе и понятно, считаем результаты, закидываем их в поля, а в выводе результатов берем информацию из полей.