有没有谁做过DBGRID到Stringgrid的多项拖放!
这个可不可以实现!
可以讲一下怎么实现吗?

解决方案 »

  1.   

    1.将DBGrid 的 DragMode 设为 dmManual
    2。
    procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
     if  ssLeft  in  Shift  then
           TDBGrid(Sender).BeginDrag(False);
    end;
    3。
    procedure TForm1.StringGrid1DragOver(Sender, Source: TObject; X,
      Y: Integer; State: TDragState; var Accept: Boolean);
    var
      i,j: Integer;
    begin
      Accept := False;
      if not (Source is TDBGrid) then
         exit;
      with DBGrid1.DataSource.DataSet do
        for i := 0 to DBGrid1.SelectedRows.Count-1 do
        begin
          GotoBook(pointer(DBGrid1.SelectedRows.Items[i]));
          if StringGrid1.Row + 1 >= StringGrid1.RowCount then
          StringGrid1.RowCount := StringGrid1.RowCount + 1;
        //StringGrid1.Row := StringGrid1.Row + 1;
          for j := 0 to FieldCount-1 do
            StringGrid1.Cells[j,StringGrid1.Row + i] := Fields[j].AsString;
        end;
      Accept := true;
    end;
      

  2.   

    哦!!!
    谢谢   meiqingsong(阿飛)
    这样的话只可以拖放一条!我不是想拖放一条!我是想可以选中多条然后进行拖放!
    但是你没有发现如果你的鼠标当再击下的进行拖放的时候
    又变回只选中当前的一条记录而已,其实那个拖放我内容我知道是如何去实现的,
    只是在那个DBGRID的多项选择时拖放就不行了!就只是一条写过去了!!现在我想知道如何当我按下左键的时候它也不会只是选当前记录,而选中以前选择了的全部记录???我如何可以用左键来选中多项拖放过去呢???
      

  3.   

    我写的可以拖放多条:  1。DBGrid 的 options.MultiSelect 设为true
      2。按住ctrl 键, 用鼠标点选DBGrid 就可以选中多条, 再拖放就可以了
      

  4.   

    可以做到,在DBGrid拖动时,看有多少条记录被选择了,然后一条一条的加入到StringGrid就OK了。
      

  5.   

    哦,知道了!我忘记了按住CTRL,怪不得我搞来搞去都不行的!可不可以改为按住SHIFT进行多选.
      

  6.   

    for i := 0 to DBGrid_Dial.SelectedRows.Count -1 do begin
      //楼上的代码
    end ;