如何在DBGRID中用鼠标拖拽来实现多条记录的选择?(100分)

  • 主题发起人 主题发起人 jadeking
  • 开始时间 开始时间
J

jadeking

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在DBGRID中用鼠标拖拽来实现多条记录的选择?
谢谢各位大虾!
 
在Option中有dgMultiSelect属性啊,设成True就可以了。
 
用devExpressGrid很容易而且有好多其他好的功能
 
tanglu:我已经试过你的方法,不行!!
 
要实现在DBGRID中用鼠标拖拽来选择多条记录:
1。自己编程。
2。找控件。

 
在我的实际应用中有点折中:
Option的dgMultiSelect属性设成True;
要拖动时,让用户拽着DBGrid的标题而不是记录区。
(DBGrids.TCustomGrid重载了MouseDown方法,很臭,使得DBGrid的记录区不但不能拖动,
而且不能用Shift键选择多条记录,只能用Ctrl键一条一条地增加选择的记录数。我有一段
用Ctrl键选择一片记录的代码,有兴趣的话可以贴给你)
 
龙丹:
谢谢你!请贴给我这段程序!
 
接受答案了.
 
To jadeking:
对不起,现在才重见此贴。

以下是 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;
 
type
TDBGrid=class(DBGrids.TDBGrid)
protected
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
end;

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;

 
后退
顶部