dbgrid跨页多选,以下是在一页内可多选的代码,就是按住shift可以连续多选
可不能选超过一页的内容
procedure TSortDBGrid.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;问题的关键在于判断当前鼠标按下时鼠标指向的事记录集的第几条记录
而不是gird的行(row是grid可见区域的行号〕
可不能选超过一页的内容
procedure TSortDBGrid.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;问题的关键在于判断当前鼠标按下时鼠标指向的事记录集的第几条记录
而不是gird的行(row是grid可见区域的行号〕
解决方案 »
- 80分求一简单SQL语句
- 如何在程序中修改ACCESS数据库的密码?
- 关于SPCOMM问题/GPRS通信的问题,进来就给分,不够了再加新帖子!!!!
- 100分请教各位老大:treeview中如何插入一个COMBOBOX?
- 帮朋友招聘程序员
- 我操你妈的,找了老半天也没有找到!兄弟进来看看,你会不会?
- 如何用存储过程实现根据条件在不同的数据库之间提取数据
- 请问哪里有Delphi 6.0中国版可以下载?
- 如何生成.dpk文件?
- delphi6里clx是什么意思,主要技术特点是什么?
- 怎样把ImageList中的图赋给Image?
- 问题,急:怎样在ListView里的一个SubItem里面加入其他的VCL组件,比如Edit,ComboBox等
dbgrid只能安注ctrl一个一个的多选,太慢了!!!
2.在dbgrids.pas中找到:
procedure ClearSelection;
begin
if (dgMultiSelect in Options) then
begin
// FBooks.Clear;
FSelecting := False;
end;
end;
象上面这样把那句话注释掉,这时候用键盘(shift+箭头)选中的行已经不会
因为纪录的移动而被清除选择了,革命已经成功了99%。剩下的就是自己程序的事情,比如在dbgrid的onkeypress中:procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#32 then
with dbgrid1.SelectedRows do
CurrentRowSelected:=not CurrentRowSelected;
end;
begin
table.GotoBook(pointer(dbgrid.Selectedrows[i]));
....
end;