Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 14 Current »

Description

ListGrid displays a list of objects in a grid, where each row represents one object and each cell in the row represents one property.

Periodically updating a ListGrid is possible in the following ways:

  • Using the invalidateCache method. This approach updates the data and will show a loading message. However, this API will disrupt the existing view.
  • Transparent update by DataSource using the fetchData method. This method updates the data but doesn't show a loading message and won't disrupt the existing view.

A working example is available in the attachment.

Transparent update

For transparent loading of the data the fetchData method should be used.

Update by DataSource
private void onRefresh() {
    DataSource dataSource = listGrid.getDataSource();
    Criteria criteria = listGrid.getCriteria();
    Integer[] visibleRows = listGrid.getVisibleRows();
    
	// request one page's worth of data on either side of the current viewport
    Integer startRow = visibleRows[0] - listGrid.getResultSet().getResultSize();
    Integer endRow = visibleRows[1] + listGrid.getResultSet().getResultSize();
    if (startRow < 0) {
        startRow = 0;
    }
    
	DSRequest request = new DSRequest();
    request.setStartRow(startRow);
    request.setEndRow(endRow);
    request.setSortBy(listGrid.getSort());
    
	dataSource.fetchData(criteria, new DSCallback() {
        @Override
        public void execute(DSResponse response, Object rawData, DSRequest request) {
            onRefreshed(response);
        }
    }, request);
}

private void onRefreshed(DSResponse response) {
    
	DataSource dataSource = listGrid.getDataSource();
    ResultSet resultSet = new ResultSet(dataSource);
    resultSet.setInitialLength(response.getTotalRows());
    
	// correctly position the result in the resultset's cache 
    Record[] result = response.getData();
    Record[] initialData = new Record[response.getTotalRows()];
    System.arraycopy(result, 0, initialData, response.getStartRow(), result.length);
    resultSet.setInitialData(initialData);
    
	resultSet.setInitialSort(listGrid.getSort());
    resultSet.setCriteria(listGrid.getCriteria());
    listGrid.setData(resultSet);
}

Attachments

  File Modified
You are not logged in. Any changes you make will be marked as anonymous. You may want to Log In if you already have an account.
No files shared here yet.
  • Drag and drop to upload or browse for files
    • No labels