Cita:
Empezado por duilioisola
Cuando el CDS detalle cambia de estado el CDS maestro permanece igual [...] Supongo que tienes algún código que al cambiar datos del CDS detalle recalcula o actualiza el CDS maestro.
|
Hola
duilioisola. Eso sería si fuese una relación maestro-detalle típica (MasterSource, MasterFields...), pero en el caso que plantea
_Cali se trata de conjuntos de datos anidados (
nested data sets), donde el detalle se asocia al maestro mediante la propiedad DataSetField.
_Cali: El comportamiento que observas es normal, pues al ser el detalle un conjunto de datos anidado, es considerado "parte" del conjunto de datos maestro. El código nativo que lo produce está en la clase base TDataSet:
Código Delphi
[-]
procedure TDataSet.CheckParentState;
begin
if DataSetField <> nil then
DataSetField.DataSet.Edit;
end;
procedure TDataSet.Edit;
begin
if not (State in [dsEdit, dsInsert]) then
if FRecordCount = 0 then Insert else
begin
CheckBrowseMode;
CheckCanModify;
DoBeforeEdit;
CheckParentState;
CheckOperation(InternalEdit, FOnEditError);
GetCalcFields(ActiveBuffer);
SetState(dsEdit);
DataEvent(deRecordChange, 0);
DoAfterEdit;
end;
end;
En mi opinión está bien que ocurra de esa forma, pues cualquier cambio que hagas en el conjunto de datos detalle necesitarás aplicarlo con el método ApplyUpdates del conjunto de datos maestro. Así que antes de proponer soluciones, indaguemos cuál es el problema realmente. ¿Podrías darnos algo más de información de por qué no deseas que el estado del maestro sea congruente con lo que ocurre en el detalle?
Saludos.
Al González.
