中间一系列过程先就不细说了。当改变了DATASET的数据, 一口气下去,(都是在主线程里面的同步操作,这点比较重要),反正是调用到了DataLink 就从这儿开始,调用DataLink, //----------------------------------------------------------------- procedure TDataSource.NotifyLinkTypes(Event: TDataEvent; Info: Longint; LinkType: Boolean); var I: Integer; begin for I := FDataLinks.Count - 1 downto 0 do with TDataLink(FDataLinks[I]) do if LinkType = VisualControl then DataEvent(Event, Info); end; //---------------------------------------procedure TDataLink.DataEvent(Event: TDataEvent; Info: Longint); var Active, First, Last, Count: Integer; begin ..... case Event of deDataSetChange: DataSetChanged; //现在就看这个DataSetChanged ..... end; //-------------------------------- TDBGrid里面实现DataLink的是TGridDataLink的类实例。procedure TGridDataLink.DataSetChanged(Field: TField); begin FGrid.DataChanged; //这儿就是调用TCUSTOMDBGRID了 FModified := False; end;
这几天我也为得不到dataset.delete的事件而烦恼
一口气下去,(都是在主线程里面的同步操作,这点比较重要),反正是调用到了DataLink
就从这儿开始,调用DataLink,
//-----------------------------------------------------------------
procedure TDataSource.NotifyLinkTypes(Event: TDataEvent; Info: Longint;
LinkType: Boolean);
var
I: Integer;
begin
for I := FDataLinks.Count - 1 downto 0 do
with TDataLink(FDataLinks[I]) do
if LinkType = VisualControl then
DataEvent(Event, Info);
end;
//---------------------------------------procedure TDataLink.DataEvent(Event: TDataEvent; Info: Longint);
var
Active, First, Last, Count: Integer;
begin
.....
case Event of
deDataSetChange: DataSetChanged;
//现在就看这个DataSetChanged
.....
end;
//--------------------------------
TDBGrid里面实现DataLink的是TGridDataLink的类实例。procedure TGridDataLink.DataSetChanged(Field: TField);
begin
FGrid.DataChanged; //这儿就是调用TCUSTOMDBGRID了
FModified := False;
end;