怎样把一条记录从一个DBGrid中用鼠标拖拽到另一个中?
怎么用代码实现啊?
谢谢

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, Grids, DBGrids, ADODB;type
      TForm1 = class(TForm)
        ADOTable1: TADOTable;
        DBGrid1: TDBGrid;
        DBGrid2: TDBGrid;
        DataSource1: TDataSource;
        procedure DBGrid2DragOver(Sender, Source: TObject; X, Y: Integer;
          State: TDragState; var Accept: Boolean);
        procedure DBGrid2DragDrop(Sender, Source: TObject; X, Y: Integer);
        procedure DBGrid1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.DBGrid2DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
       if Source is TDBGrid then
         Accept := true;
    end;procedure TForm1.DBGrid2DragDrop(Sender, Source: TObject; X, Y: Integer);
    begin
         if (sender is TDBGrid) and (source is TDBGrid) then
         begin
            showmessage((source as tdbgrid).DataSource.DataSet.FieldByName('userid').Value);//把这里改成添加操作,就可以了。
         end;
    end;procedure TForm1.DBGrid1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
       if Button = mbleft then
        (sender as TDBGrid).BeginDrag(false);
    end;end.
      

  2.   

    算了。。好人做到底,给你写完算了。
    上面的例子是假设一个dbgrid1中有字段userId,用户从dbgrid1中拖动当前记录到dbgrid2,并把数据录入dbgrid2。
    用下面的添加代码替换上面的.
    procedure TForm1.DBGrid2DragDrop(Sender, Source: TObject; X, Y: Integer);
    begin
         if (sender is TDBGrid) and (source is TDBGrid) then
         begin
            with (Sender as TDBGrid).DataSource.DataSet do
            begin
    //添加的代码在这里,
                if not active then Open;
                Insert;
                FieldByName('userid').Value :=  (source as tdbgrid).DataSource.DataSet.FieldByName('userid').Value;
                post;
                Refresh;
            end;
         end;
    end;
      

  3.   

    wudi_1982(︻┳═一)  热心人士啊
      

  4.   

    考。。我写完就测试了的,D7,WINXP下测试通过。
      

  5.   

    if Button = mbleft then
        (sender as TDBGrid).BeginDrag(false);这是写在DBGRID1中的,其它的都是写在DBGRID2中的。
      

  6.   

    从DBGRID1往DBGRID2拖动。。别搞反了。
      

  7.   

    DBGrid1.BeginDrag();
    DBGrid1.EndDrag();
      

  8.   

    没有啊
    我写过拖拽的代码
    就是不会写从DBGrid拖到另一个DBGrid中
    datasourse连在DBGrid1上,把DBGrid1的记录拖到DBGrid2中
    没有别的拉
    老是没有反应
      

  9.   

    你的dbgrid2怎么设置的啊,你设置一个断点,单步执行,
    看看执行到下面的代码时,情况如何;
    procedure TForm1.DBGrid2DragDrop(Sender, Source: TObject; X, Y: Integer);
    begin
         if (sender is TDBGrid) and (source is TDBGrid) then
         begin
            with (Sender as TDBGrid).DataSource.DataSet do
            begin
    //添加的代码在这里,
                if not active then Open;
                Insert;
                FieldByName('userid').Value :=  (source as tdbgrid).DataSource.DataSet.FieldByName('userid').Value;
                post;
                Refresh;
            end;
         end;
    end;
      

  10.   

    提示错误  field userid cannot modified
      

  11.   

    userid是我测试用的表里面的,你的表里有这个字段吗?
      

  12.   

    还有,你的DBGRID2连接的是ADOTABLE还是ADOQUERY啊。
      

  13.   

    我的也有这个字段
    ADOTABLE
    按照你的提示 只有一个ADOTABLE啊
      

  14.   

    你的DBGRID2连接的ADOTABLE连接的是那个表啊。。
      

  15.   

    另外一张表
    就是需要从DBGRID1从获取记录
    最后保存
    DBGRID1 和DBGRID2 分别有两张表
      

  16.   

    procedure TForm1.DBGrid2DragDrop(Sender, Source: TObject; X, Y: Integer);
    begin
         if (sender is TDBGrid) and (source is TDBGrid) then
         begin
            with (Sender as TDBGrid).DataSource.DataSet do
            begin
    //添加的代码在这里,            showmessage(FieldByName('userid').asstring);你先用这句,看看能不能从DBGRID1中取得DBGRID1指针所在位置的当前值
            end;
         end;
    end;
      

  17.   

    你看看,如果那个showmessage可以显示你dbgrid1当前指针所在位置的数据,那么我给你的代码就没有问题,你可以在添加的地方适当修改一下,例如如果你的表的结构中,要求某些字段不能为空,那么一定要赋值,否则,就报错。
      

  18.   

    我需要的是
     拖拽以后增加一条,序号也增加一个:
     增加序号我是这么写的:adotable1.FieldByName('userid').Value:=adotable1.RecordCount+1; 不知道对不??
    还是出错,field userid cannot modified
      

  19.   

    我在dbgrid中用右键增加和插入一条记录遇到类似问题
    报错 不能增加空记录 加了类似上面的语句 还是报错 field userid cannot modified
    DBGRid中序号加1的语句是不是写错了
    还是什么其他的?
      

  20.   

    adotable1.FieldByName('userid').Value:=1000;
    你看看能不能用啊?
      

  21.   

    但是 我用右键增加一条记录:dbgrid1.DataSource.DataSet.Edit; //编辑状态
                               dbgrid1.DataSource.DataSet.insert;//追加
                               dbgrid1.DataSource.DataSet.Post;//提交,保存到数据库
    就是增加一条空的记录
    估计是搞错了
      

  22.   

    wudi_1982(︻┳═一) ,为你顽强的精神所感动