Hola Parsec.
Coincido con
Marcos, sin dudas es el caso.
El evento
OnCalcFields se dispara cuando se cambia la fila activa de la tabla o cuando la propiedad
AutoCalcFields esta activa y se produce alguna modificación en los campos de la primera.
La cantidad de veces que se dispare el evento
OnCalcFields al abrir el DataSet, depende de la cantidad de filas que el componente requiera mostrar en ese momento.
Para comprobar esto de manera simple, agregá un ListBox y reducí el DBGrid para que muestre una sola fila y luego usa este código:
Código Delphi
[-]
...
implementation
var
cont : Integer = 0;
procedure TForm1.FormCreate(Sender: TObject);
begin
DataSet.Open;
end;
procedure TForm1.DataSetCalcFields(DataSet: TDataSet);
begin
ListBox1.Items.Add('CalcFields '+IntToStr(cont));
Inc(cont);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DBGrid1.Height := DBGrid1.Height + 50;
end;
Verás que a medida que el DBGrid crece en altura se van reflejando las ocurrencias en el ListBox.
Saludos