标签:
在之前已经提到过lookup方法是设置下拉框选项
public void lookup() { SysTableLookup lookup = SysTableLookup::newParameters(tableNum(NumberSequenceTable), this); Query lookupQuery = new Query(); QueryBuildDataSource lookupDataSource; DictRelation dr = new DictRelation(tableNum(NumberSequenceTable)); lookupDataSource = lookupQuery.addDataSource(tableNum(NumberSequenceTable)); lookupDataSource = lookupDataSource.addDataSource(tableNum(NumberSequenceScope)); lookupDataSource.joinMode(JoinMode::InnerJoin); dr.loadTableRelation(tableNum(NumberSequenceScope)); lookupDataSource.addRange(fieldNum(NumberSequenceScope, DataArea)).value(curext()); lookupDataSource.addRelation(dr); lookup.parmQuery(lookupQuery); lookup.addLookupfield(fieldNum(NumberSequenceTable, NumberSequence), true); lookup.addLookupfield(fieldNum(NumberSequenceTable, Txt), true); lookup.performFormLookup(); }
query的结构呢可以参考一下下图,注意datasource是层层嵌套的。
由于NumberSequenceTable表是与NumberSequenceScope有关系的,所以就在lookupDataSource NumberSequenceTable后面加了一个NumberSequenceScope。
添加NumberSequenceScope是因为需要通过NumberSequenceScope的公司来锁定查询的范围,所以有了lookupDataSource.addRange(fieldNum(NumberSequenceScope, DataArea)).value(curext());的代码,用以就是根据当前公司查询。
其实lookup是根据一个字段来确定当前选择的内容的,所以如果控件的内容不是指定字段的值,那么在打开下拉框的时候光标就不会选择到该记录。那如果我显示的记录与我需要选择的记录不同该怎么办,我的处理方式是在performFormLookup()执行之前把控件的值设置成为指定字段的值,然后在performFormLookup()完之后通过关联关系将空间的值设置回我们想要的值。因为选择记录会刷新控件的内容,那么刷新的内容就是我们指定的值。
下面代码是一个实例
public void lookup() { SysTableLookup lookup; Query lookupQuery = new Query(); QueryBuildDataSource lookupDataSource; InventBuyerGroup inventBuyerGroup; select firstOnly inventBuyerGroup where inventBuyerGroup.Group == purchTable.ItemBuyerGroupId; this.text(inventBuyerGroup.Group); lookup = SysTableLookup::newParameters(tableNum(InventBuyerGroup), this); lookupDataSource = lookupQuery.addDataSource(tableNum(InventBuyerGroup)); lookupDataSource.addOrderByField(fieldNum(InventBuyerGroup, Group)); lookup.parmQuery(lookupQuery); lookup.addLookupfield(fieldNum(InventBuyerGroup, Group), true); lookup.addLookupfield(fieldNum(InventBuyerGroup, Description), false); lookup.performFormLookup(); this.text(inventBuyerGroup.Description); }
true false设置哪一个字段有效,之前第一个代码中都是true,以最后一个为准。
标签:
原文地址:http://www.cnblogs.com/kumahime/p/5434178.html