没有从当前控件中捕获到字段而无法查询!
这是项目中的一个提示,今天同事又遇到这样的问题,在一个方法中,Lookup找不到字段,经查,原来下面这段代码,aDataSet就是nil的,所以aField也是nil.
if TcxGridTableView(Components[i]).Columns[j].Properties is TcxPopupEditProperties then begin aDataSet:=TcxGridDBTableView(Components[i]).DataController.DataSource.DataSet; TcxPopupEditProperties(TcxGridTableView(Components[i]).Columns[j].Properties).OnInitPopup := PopupEditInitPopup; aField:=TcxGridDBColumn(TcxGridTableView(Components[i]).Columns[j]).DataBinding.Field; TcxPopupEditProperties(TcxGridTableView(Components[i]).Columns[j].Properties).LookupItems.AddObject('a', aField);
aDataSet为nil,那说明TcxGridDBTableView(Components[i]).DataController.DataSource没有指定DataSet,打开界面,发现:
dsMaster设置的DataSet没有值了!
原来同事在复制这个单元到另外的项目中,丢了这个属性值,找到原因,再进一步查找,这个单元的基类,同事是在OnShow事件中,写了:
dsMaster.DataSet := TFuncEntry(Self.Owner).GetInfo.GetMasterDataSet;
把这一行代码,移到OnCreate中:
procedure TCustomBaseTableDoc.FormCreate(Sender: TObject); begin inherited; dsMaster.DataSet := TFuncEntry(Self.Owner).GetInfo.GetMasterDataSet; end;
再运行,问题不在!