Delphi 关于DBGrid多选删除(shitf多选,ctrl多选)
////删除多选记录
procedure THistoryForm.DeleteButtonClick(Sender: TObject);
var
tempBookMark:TbookMark;
i:integer;
begin
if dbgrid1.SelectedRows.Count <= 0 Then
begin
MessageBox(Handle,'请选择您要删除的记录','提示',MB_OK);
Exit;
end;
If MessageBox(Handle,'删除后数据将不可恢复,您确定要删除吗?','提示',mb_iconinformation+mb_YesNo)=IdYes Then
Begin
i:=0;
DBGrid1.Datasource.Dataset.DisableControls;
While i<=dbgrid1.SelectedRows.Count - 1 Do
Begin
DBGrid1.Datasource.Dataset.Bookmark:=dbgrid1.SelectedRows.Items[i];//重要的在这里,取得BOOKMARK
TempBookmark:=DBGrid1.Datasource.Dataset.GetBookmark;
DBGrid1.Datasource.Dataset.GotoBookmark(TempBookmark);
with ADOQuery3 do
begin
Close;
SQL.Clear;
SQL.Add('delete from his where id=:a');
Parameters.ParamByName('a').Value:=Dbgrid1.DataSource.DataSet.fieldbyname('id').AsInteger;
ExecSql;
end;
DBGrid1.Datasource.Dataset.FreeBookmark(TempBookmark); //释放BOOKMARK
inc(i); //下一个选择记录
End;
DBGrid1.Datasource.Dataset.EnableControls;
Act_ShowCTInfo(LBName.Caption);
Memo1.Clear;
end;
end;
//定义全局变量
var
blSelect: Boolean;
BookMark: TBookMark;
CurrNo, OldNo: integer;
/////////按Shift多选
procedure THistoryForm.DBGrid1MouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin //实现 Shift+鼠标左键单击 多选
if Button = mbLeft then
begin
if not blSelect then
begin
BookMark := ADOQuery1.GetBookMark;
OldNo := ADOQuery1.RecNo;
blSelect := True;
Exit;
end
else
begin
if ssShift in Shift then
begin
CurrNo := ADOQuery1.RecNo;
ADOQuery1.DisableControls;
ADOQuery1.GotoBookmark(BookMark);
DBGrid1.SelectedRows.CurrentRowSelected := True;
if CurrNo > OldNo then
begin
while CurrNo > ADOQuery1.RecNo do
begin
DBGrid1.SelectedRows.CurrentRowSelected := True;
ADOQuery1.Next;
end;
end
else
begin
while CurrNo < ADOQuery1.RecNo do
begin
DBGrid1.SelectedRows.CurrentRowSelected := True;
ADOQuery1.Prior;
end;
end;
ADOQuery1.EnableControls;
ADOQuery1.FreeBookmark(BookMark);
blSelect := False;
CurrNo := 0;
OldNo := 0;
end
else
begin
BookMark := ADOQuery1.GetBookMark;
OldNo := ADOQuery1.RecNo;
blSelect := True;
Exit;
end;
end;
end;
end;
- 关于CollectionView的九宫格排布,多选,全选实现及删除
- 关于checkbox的ListView实现多选、全选、反选、删除更简单的方法
- 关于DELPHI中出现'BOF或EOF'中有一个是“真”,或者当前的记录已被删除,
- 关于tableView多选删除的编辑设置
- 关于CollectionView的九宫格排布,多选,全选实现及删除
- 关于MFC ListControl多选删除的实现
- 关于Recyclerview 实现多选,单选,全选,反选,批量删除的功能的实现
- delphi中关于字符串的操作
- 关于VIM 批量添加注释和删除注释的方法
- 关于在DELPHI6中使用正则表达式的一些心得
- 关于VS2005中GridView的自定义分页,单选、多选、排序、自增列的简单应用
- 关于商城购物车的总结---删除功能
- 关于ListView删除item后 界面数据显示不对问题
- 关于通过不含虚析构函数的基类类型的指针删除派生类对象的问题
- 关于“ORA-12988: 无法删除属于 SYS 的表中的列”
- 关于分治消除删除操作影响的小记
- 关于新版Delphi的并发操作及公共变量并发读写
- 关于rm删除文件空间不释放的问题
- 关于VS2005中GridView的自定义分页,单选、多选、排序、自增列的简单应用
- 关于Delphi 2007