Hola:
Creo que lo más apropiado es que la creación de esos Items la realices en el método SetDataSet de TDBViewer, así se inicializan cada vez que el programador/usuario cambia el DataSet, ya sea en diseño o en ejecución (al crearse el TDBViewer no puede ser porque aún no sabemos cuál es el DataSet). Para evitar que se sobreescriban los valores cuando se lea del archivo .DFM, haces la comprobación de la variable State:
Código:
procedure TDBViewer.SetDataSet (Value: TDataSet);
begin
if Value <> FDataSet then
begin
FDataSet := Value;
if NOT (dsReading in ComponentState) then
begin
FFieldDefs.Clear;
// aquí rellenas los Items tomados del DataSet
end;
if Value <> nil then Value.FreeNotification;
end;
end;