有两个dbgrid,一个dbgrid1,一个dbgrid2,连接到adoquery1 表A,adoquery2表B上.表A和表了B通过一个Id号连接的。好了。问题:怎样实现把表dbgrid1中当前选择的行的数据   拖到(就是在windows复制文件一样)dbgrid2里,在dbgrid2中增加一条记录。(当然通过其它很多方法可以实现把表B的记录添加到表A里。 我现在指的是这种方法。)注意:是拖到, 而且带个影子什么的.
 

解决方案 »

  1.   

    可以实现,原理是:
        分别在dbGrid的OnDragDrop, OnDragOver, OnStartDrag, OnEndDrag的几个事件处理,当在dbgrid1选择到数据时,在dbgrid1的OnStartDrag读取数据的内容, 在dbgrid2的OnDragDrop事件复制数据内容。
      

  2.   

    在onEndDrag里根据a数据集纪录的内容对b表添加,添加完后定位到该条记录即可。
      

  3.   

    Unit edbgrid;interfaceuses
      DBGrids, Controls, Classes;type
      TEDBGrid = class(TDBGrid)
      private
        FOnMouseDown: TMouseEvent;
        FOnMouseUp: TMouseEvent;
      protected
        procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y:
    Integer); override;
        procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y:
    Integer); override;
      published
        Property OnMouseDown : TMouseEvent read FOnMouseDown write
    FOnMouseDown ;
        Property OnMouseUp : TMouseEvent read FOnMouseUp write FOnMouseUp ;
    end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Data Controls',[TEDBGrid]);
    end;procedure TEDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState;
    X, Y: Integer);
    begin
      inherited MouseDown(Button,Shift,X,Y);
      if Assigned(FOnMouseDown) then
        FOnMouseDown(Self,Button,Shift,X,Y);
    end;procedure TEDBGrid.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
    Y: Integer);
    begin
      inherited MouseUp(Button,Shift,X,Y);
      if Assigned(FOnMouseUp) then
        FOnMouseUp(Self,Button,Shift,X,Y);
    end;
    end.
    可以相应。