0

我正在修改内置 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);。我在调试模式下检查了它,返回了一个对象,并且在两种情况下它看起来都“相同”,但由于某种原因它在第二个示例中不起作用,所以我猜我太早地实例化数据源或,不知何故,完全错了:)

4

1 回答 1

0

数据源一切都很好,问题很简单,我一定是累了——调用时的 boundList 对象boundList.setDataSource(ds);还没有被实例化。我不断收到空指针异常,但我认为数据源有问题。

于 2012-07-05T18:38:11.487 回答