要实现多选,把dgMutiSelect项包含进DBGrid的Options集合属性里, 也就是在属性编辑器里把Options下面的dgMutiSelect设为True。但是不能用Shift连续选择:( 至于删除,本来就可以在DBGrid上按Ctrl+Del实现,但这里有一个问题就是如果Options里 包含dgConfirmDelete,那么会在删除时出现英文提示。可以把dgConfirmDelete设为False, 然后在DBGrid的OnKeyDown里自己实现中文提示: procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key = VK_DELETE) and (ADOQuery1.State = dsBrowse) then begin if Application.MessageBox('确定删除选定记录?', '提示', MB_OKCANCEL + MB_ICONQUESTION) = ID_OK then if DBGrid1.SelectedRows.Count = 0 then ADOQuery1.Delete else DBGrid1.SelectedRows.Delete; Key := 0; end; end;
procedure TForm1.Button1Click(Sender: TObject); var i, j: Integer; s: string; begin if DBGrid1.SelectedRows.Count>0 then with DBGrid1.DataSource.DataSet do begin for i:=0 to DBGrid1.SelectedRows.Count-1 do begin GotoBook(pointer(DBGrid1.SelectedRows.Items[i])); delete; end; post; end; end;
也就是在属性编辑器里把Options下面的dgMutiSelect设为True。但是不能用Shift连续选择:(
至于删除,本来就可以在DBGrid上按Ctrl+Del实现,但这里有一个问题就是如果Options里
包含dgConfirmDelete,那么会在删除时出现英文提示。可以把dgConfirmDelete设为False,
然后在DBGrid的OnKeyDown里自己实现中文提示:
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_DELETE) and (ADOQuery1.State = dsBrowse) then begin
if Application.MessageBox('确定删除选定记录?', '提示',
MB_OKCANCEL + MB_ICONQUESTION) = ID_OK then
if DBGrid1.SelectedRows.Count = 0 then ADOQuery1.Delete
else DBGrid1.SelectedRows.Delete;
Key := 0;
end;
end;
var
i, j: Integer;
s: string;
begin
if DBGrid1.SelectedRows.Count>0 then
with DBGrid1.DataSource.DataSet do
begin
for i:=0 to DBGrid1.SelectedRows.Count-1 do
begin
GotoBook(pointer(DBGrid1.SelectedRows.Items[i]));
delete;
end;
post;
end;
end;