我正在修改内置 ds 的示例。此示例的工作方式是您需要选择一个数据源,然后从那里填充一个表中的数据。这个想法是为了展示同一个组件如何适应多个数据源。我已经成功地运行了这个示例并且它可以工作,但是我正在尝试修改它,所以你跳过了第一步——只有一个数据源被加载“到”表中。令我困惑的是,这应该是微不足道的,但由于某种原因它不是。我将只粘贴代码的不同部分,这个有效:
// we create a list of datasources
ListGrid grid = new ListGrid();
grid.setLeft(20);
grid.setTop(75);
grid.setWidth(130);
grid.setLeaveScrollbarGap(false);
grid.setShowSortArrow(SortArrow.NONE);
grid.setCanSort(false);
grid.setFields(new ListGridField("dsTitle", "Select a DataSource"));
// I'm just loading the one I need
grid.setData(new ListGridRecord[] { new DSRecord("predmeti", "predmeti")});
grid.setSelectionType(SelectionStyle.SINGLE);
grid.addRecordClickHandler(new RecordClickHandler() {
public void onRecordClick(RecordClickEvent event) {
DSRecord record = (DSRecord) event.getRecord();
bindComponents(record.getDsName());
}
});
grid.draw();
这是 bindComponents 方法:
private void bindComponents(String dsName) {
DataSource ds = DataSource.get(dsName);
boundList.setDataSource(ds);
boundViewer.setDataSource(ds);
boundForm.setDataSource(ds);
boundList.fetchData();
newBtn.enable();
saveBtn.disable();
}
这可以正常工作。现在,由于我只有一个数据源,我可以跳过网格,直接调用 bindComponents:
bindComponents();
bindComponents 看起来像这样:
private void bindComponents() {
DataSource ds = DataSource.get("predmeti");
boundList.setDataSource(ds);
boundViewer.setDataSource(ds);
boundForm.setDataSource(ds);
boundList.fetchData();
newBtn.enable();
saveBtn.disable();
}
我不明白为什么第二个不起作用,它会中断boundList.setDataSource(ds);
。我在调试模式下检查了它,返回了一个对象,并且在两种情况下它看起来都“相同”,但由于某种原因它在第二个示例中不起作用,所以我猜我太早地实例化数据源或,不知何故,完全错了:)