我制作了一个带有两个表的应用程序,分别用于数据源A和B。
B是与A的关系(通过公共ID字段)。
所以我想显示表A,在表B下。
理想情况下,只需单击A中的一行即可
a)选择该行,然后 b)更新表B以显示数据源B中的相关项目。
appmaker无法自动完成此操作,但是我可以像这样在表A上添加onload的代码:
app.datasources.A.query.filters.B.Id._equals = widget.datasource.item.Id;
app.datasources.B.load();
以及在tableARow本身的onClick事件上,我还添加了:
app.datasources.A.selectIndex(widget.parent.childIndex);
app.datasources.B.query.filters.B.Id._equals = widget.datasource.item.Id;
app.datasources.CurrentValuation.load();
除了TableA不会实际选择我在UI中单击的行(所选行始终是第二行)这一事实外,大多数方法都有效。数据源为tableB选择了正确的项目,但UI显示了TableA中选择的错误行。
我怀疑我要么需要调用另一种方法,要么可能有一种更好的方法,而我是一个笨蛋。无论哪种方式,谢谢您的回答!
答案 0 :(得分:0)
理想情况下,TableA数据源应为“ A”,而表B应为“ A:B(关系)”。您还希望在A数据源中预取B。如果在表数据源上设置关系,则将无法对该表进行标题排序或分页。
或者,如果要基于TableA项过滤TableB,则可以在A数据源onItemChange事件中设置过滤器,如下所示:
var item = datasource.item;
if (item !== null) {
var ds = app.datasources.B;
ds.query.filters.A._equals = item;
ds.load();
}
如果要坚持使用现有内容,请从TableA中删除onLoad代码,并将表行onClick事件的代码更改为:
app.datasources.B.query.filters.A._equals = widget.datasource.item;
app.datasources.B.load();
这应该可以解决您当前的问题,您也可以随时探索其他选择。