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