I have a table with 60 rows and I am using a custom selection model that extends com.extjs.gxt.ui.client.widget.grid.CellSelectionModel.

1) Select the first row, scroll to the bottom (using mouse scroll wheel).
2) Shift + Select the last row in the table. This should select all the rows in the table.
3) Now scroll up in the table (again using mouse scroll wheel) and observe that the top 10 rows are not selected.

On debugging, I found that in BufferView, when it calls onRowSelect(int rowIndex), it checks if the row has been rendered or not. In this case, for the top 10 rows, it returns false, that is, those rows have not been rendered. That's why on scrolling up the table, they appear as not selected. While the other 50 rows have been selected. How do I fix this? When the user has used Shift+Select from first to the last row in the table, all of them should appear to be selected on scrolling up/down.

protected void onRowSelect(int rowIndex) {
    if (isRowRendered(rowIndex)) {

protected boolean isRowRendered(int index) {
    Element row = getRow(index);
    return row != null && row.hasChildNodes();