Собственно, вариантов решения 2.
1. искать компонент, который это уже умеет делать (напимер, DevExpress'овский грид дает такую возможность).
2. Фактически делать так, как приведено в вопросе, но с некоторыми исправлениями.
Код:
function TQuickViewForm.GetSum(AFieldIdx: Integer): Double;
var
BM : Pointer;
begin
Result := 0;
// сохраняем текущую позицию курсора
BM := cdsData.GetBookmark;
// Блокируем отрисовку визуальных компонентов
cdsData.DisableControls;
// Считаем
cdsData.First;
Try
While Not cdsData.Eof Do
Begin
Result := Result + cdsData.Fields[AFieldIdx].AsFloat;
cdsData.Next;
End;
Finally
// Восстанавливаем текущую позицию курсора
cdsData.GotoBookmark(BM);
cdsData.FreeBookmark(BM);
// Разрешаем отрисовку
cdsData.EnableControls;
End;
end;
В принципе, еще можно добавить проверку значения поля на null и прочую ерунду (например, если потом надо считать среднее значение, то заодно можно посчитать кол-во записей реально участвоваших в суммировании).