procedure TForm5.RzDBGrid1DragDrop(Sender, Source: TObject; X, Y: Integer);
  var gc:TGridCoord;
begin
gc :=TDBGhack(RzDBGrid1).MouseCoord(x,y);
 if(gc.X>0)and(gc.Y>0) then
 begin                                               //
 RzDBGrid1.DataSource.DataSet.MoveBy(gc.Y -TDBGHack(RzDBGrid1).Row);
 RzDBGrid1.DataSource.DataSet.Edit;
 RzDBGrid1.Columns.Items[gc.X -1].Field.Asstring:=listbox1.Items.Strings[listbox1.itemindex];
 end;
               RzDBGrid1.SetFocus;end;
以上是grid控件拖动的代码,gc.Y -TDBGHack(RzDBGrid1).Row,这段不是很明白,经过断点观看,gc.Y跟TDBGHack(RzDBGrid1).Row数值是一样的,结果就是相减等于0,那么我就直接不要这段代码,直接写个0上去,运行之后却发现很怪,求解释下这段代码,并解释下 RzDBGrid1.DataSource.DataSet.MoveBy用法

解决方案 »

  1.   

    MoveBy就是移动记录
    参数表示相隔行数,负数后退(向第1条记录方向),正数前进(向第N条记录方向)你的这段代码是在DragDrop事件,即拖动放下时触发
    gc.Y是鼠标坐标转换成行索引值,TDBGHack(RzDBGrid1).Row是原来的行索引,2者相减:
    负数(表示向后拖动);正数(表示向前拖动);0(同一行)放个label在窗体是看看吧:label1.caption:=inttostr(gc.Y)+','+inttostr(TDBGHack(RzDBGrid1).Row);
      

  2.   

    我是从一个Listbox拖到dbgrid,断点查看,gc.Y 跟TDBGHack(RzDBGrid1).Row都是同一个值啊,怎么都是相减等于0,直接改成0又会有问题···