假如现在我更改Table 的TableName,他会经过一系列的刷新,到DataLink中数据也变了,请问:是他通知DBGrid刷新数据,还是DBGrid回掉来刷新数据的?

解决方案 »

  1.   

    dataEvent->datachenged等等。
    这几天我也为得不到dataset.delete的事件而烦恼
      

  2.   

    中间一系列过程先就不细说了。当改变了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;