Я думаю, что код ниже будет делать то, что вы хотите, если я вас правильно понимаю. Это всего лишь испытательный стенд, требующий 2 CDS каждый с источником данных и сеткой.
Как вы можете видеть, поле ClientDataSet1Value обновляется каждый раз, когда публикуется изменение в первом CDS, но второй CDS показывает только те строки, в которых было изменено поле fkData;
procedure TForm1.FormCreate(Sender: TObject);
var
i : Integer;
begin
{
ClientDataSet1ID: TIntegerField; // fkData
ClientDataSet1Name: TStringField; // fkData
ClientDataSet1SaveCount: TIntegerField; // fkInternalCalc
}
ClientDataSet1.CreateDataSet;
for i := 1 to 3 do
ClientDataSet1.InsertRecord([i, 'name of ' + IntToStr(i)]);
end;
procedure TForm1.ClientDataSet1BeforePost(DataSet: TDataSet);
begin
if ClientDataSet1SaveCount.IsNull then
ClientDataSet1SaveCount.AsInteger := 1
else
ClientDataSet1SaveCount.AsInteger := 1 + ClientDataSet1SaveCount.AsInteger;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ClientDataSet2.Data := ClientDataSet1.Data;
ClientDataSet2.StatusFilter := [usModified];
end;
После Button2Click
сетка для второго CDS будет отображать только те строки, поля (поля) которых были изменены fKData, или одну пустую строку, если ни одна из строк не изменила данные поля fkData.