好象比较复杂耶 拖动前后取得选中的记录值的方法: DBGrid1.DataSource.DataSet.GotoBook(pointer(DBGrid1.SelectedRows.Items[i]));以下是转载的DBGrid 上用Shift键实现多选的代码: procedure TDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var i,Row1,Row2:integer; begin if (ssShift in Shift) and (dgMultiSelect in Options) and Datalink.Active then begin BeginUpdate; try Row1:=Row; Row2:=MouseCoord(X,Y).Y; if Row1<Row2 then for i:=Row1+1 to Row2 do begin Datalink.DataSet.MoveBy(1); SelectedRows.CurrentRowSelected := True; end else for i:=Row1-1 downto Row2 do begin Datalink.DataSet.MoveBy(-1); SelectedRows.CurrentRowSelected := True; end; finally EndUpdate; end; end else inherited MouseDown(Button,Shift,X,Y); end;
直接用CLIPBOARD.
2,拖动或许可行
首先设置DragMode属性为AutoMatic
然后在OnStartDarg,OnEndDarg事件中写控制语句
拖动前后取得选中的记录值的方法:
DBGrid1.DataSource.DataSet.GotoBook(pointer(DBGrid1.SelectedRows.Items[i]));以下是转载的DBGrid 上用Shift键实现多选的代码:
procedure TDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
i,Row1,Row2:integer;
begin
if (ssShift in Shift) and (dgMultiSelect in Options) and Datalink.Active then
begin
BeginUpdate;
try
Row1:=Row;
Row2:=MouseCoord(X,Y).Y;
if Row1<Row2 then
for i:=Row1+1 to Row2 do
begin
Datalink.DataSet.MoveBy(1);
SelectedRows.CurrentRowSelected := True;
end
else
for i:=Row1-1 downto Row2 do
begin
Datalink.DataSet.MoveBy(-1);
SelectedRows.CurrentRowSelected := True;
end;
finally
EndUpdate;
end;
end
else
inherited MouseDown(Button,Shift,X,Y);
end;
至于拖动, 我原意是将数据拷贝,但DBGRid框中的数据不支持拖动呀,
我只要可以拖动就好了。 我再加分。