目的:TDataGrid的右键删除。
在2603版本里做了如下实现,ActionList中添加了一个Action(Name为ActionDel),其OnExecute代码如下:
procedure TTMPIORDERINFOADDFD.ActionDelExecute(Sender: TObject);
var lvDestDs:TDataSet;
begin
lvDestDs:=TDataSet(TBizDataSetAction(Sender).CurrentDataSource.DataSet);
if lvDestDS = nil then exit;
if lvDestDS.IsEmpty then exit;
...
lvDestDS.delete;
end;
某个PopupMenu(Name为PMenuDel)的一个子菜单项的Action引用ActionDel,然后某个DataGrid(Name为DGrid1)的PopupMenu属性引用PMenuDel。
上面这实现在V2603运行后,对DGrid1的某条数据右键删除,不会提示错误, 但在3002版本就运行不通过了,提示如下图的异常,出错位置是 lvDestDs:=TDataSet(TBizDataSetAction(Sender).CurrentDataSource.DataSet) ,
可以重现,可以用TBizDataSetAction,选上自动侦测属性
procedure TMainForm.BizDataSetAction1Execute(Sender: TObject);
var
lvDestDs:TDataSet;
begin
lvDestDs := TDataSet(BizDataSetAction1.CurrentDataSource.DataSet);
if lvDestDS = nil then exit;
if lvDestDS.IsEmpty then exit;
lvDestDS.delete;
end;
procedure TMainForm.BizDataSetAction1Update(Sender: TObject);
begin
(Sender as TBizDataSetAction).Enabled := True;
end;