SmartGWT:如何在添加,更新,删除operatios后使ListGrid响应数据源结构chages?

时间:2016-09-20 12:48:47

标签: smartgwt listgrid

我有一个动态DataSource,它绑定到ListGrid。通过动态了解其列,具体取决于数据库中的数据。

因此,在插入,更新或删除ListGrid中的行之后,数据源结构可能会发生变化。然后我需要重新加载数据源以验证是否应该更改其结构(列)。因此,ListGrid必须响应这些最终的变化。

例如,当一个新行被添加到数据库表并因此列在ListGrid中时,可能会显示一个新列以显示该行的整个数据。如果删除此行,则必须删除该新列。

问题是插入或删除后,即使我调用负责重新加载数据源并销毁和重新创建网格的方法,列也保持不变。请看下面的代码:

加载数据源的方法:

private void generateNumberRangesDataSourceDynamycally() {

    String appID = AppServiceConstants.APP_ID;
    String className = AppServiceConstants.SCAFACADE_SERVICE_NAME;
    String methodName = AppServiceConstants.METHOD_GETNUMBERRANGES;

    DMI.call(appID, className, methodName, new PAIRPCCallback() {

        @Override
        public void executeRPCCall(RPCResponse response, Object rawData, RPCRequest request) {

            if (response.getStatus() == RPCResponse.STATUS_FAILURE) {

                SC.warn( scatext.error_numberrange_datasource_generation() );

            }

        }

    }, loadNumberRangesDataSource());

}

启动DMI以动态加载数据源的触发方法:

private Object[] loadNumberRangesDataSource() {

    DataSource.load(LUNummernkreiseContent.DYNAMICDS_ID, dataSourceCallbackFunction(), true);

    return new Object[] { AppController.getRequestToken() };

}

动态数据源加载的回调函数:

private Function dataSourceCallbackFunction() {

    final Function function = new Function() {

        @Override
        public void execute() {

            display.getLayout().getGrid().destroy(); // destroying the HTML reference to the component;
            display.getLayout().setGrid( null ); // nullifying the java object

            dsDynamic = DataSource.get( LUNummernkreiseContent.DYNAMICDS_ID );

            if (dsDynamic != null) {

                setupGrid();
                refreshGrid();


            }
        }

    };

    return function;
}

以下方法负责设置网格并获取当前数据:

protected void refreshGrid() {

    display.getLayout().getGrid().fetchData( criteria );

}

protected void setupGrid() {

    display.getLayout().getGrid().setDataSource( dsDynamic );

    final HeaderSpan headerSpan = new HeaderSpan(scatext.screen_lunummernkreis_grid_luHeaderSpan(),
            new String[] {LUNummernkreiseContent.START_FIELD, LUNummernkreiseContent.END_FIELD});

    display.getLayout().getGrid().setHeaderSpans( headerSpan );
    display.getLayout().getGrid().getField( LUNummernkreiseContent.START_FIELD ).setTitle( scatext.screen_lunummernkreis_window_spinnerFrom() );
    display.getLayout().getGrid().getField( LUNummernkreiseContent.END_FIELD ).setTitle( scatext.screen_lunummernkreis_window_spinnerTo() );
    display.getLayout().getGrid().getField( LUNummernkreiseContent.DELIVERYTYPE_FIELD ).setTitle( scatext.screen_lunummernkreis_window_comboType() );
    display.getLayout().getGrid().getField( LUNummernkreiseContent.COUNTRYNAME_FIELD ).setTitle( scatext.screen_lunummernkreis_window_comboCountry() );
    display.getLayout().getGrid().getField( LUNummernkreiseContent.COUNTRYCODE_FIELD ).setTitle( scatext.screen_lunummernkreis_grid_columnCountryCode() );

}

有什么想法吗?强调要点:在执行CRUD操作后,我需要网格响应动态结构数据源更改。

0 个答案:

没有答案