Этот вопрос почти , но не совсем идентичен GWT CellTable getRowElement, выбрасывающим IndexOutOfBoundsException , однако принятый там ответ не работает для меня.
Я пытаюсь получить DataGrid для отображения другой строки и ячейки из текущего представления. Иногда это может быть на той же странице, в основном нет. Если строка находится на текущей странице - либо на первой странице, либо на странице, на которую была вручную разбита страница, - тогда получение строки с помощью getRowElement (rowIdx - pageStart) работает в соответствии с ответом, упомянутым выше.
Однако, если строка не находится на текущей странице, я не нашел способа получить элемент строки.
Я попытался вычислить соответствующую страницу и настроить страницу с помощью SimplePager.setPage (), затем попытался получить элемент строки, используя либо фактический индекс строки, либо индекс, основанный на начале страницы (а также пробуя страницу до и страницу после, просто для хорошей меры). Все они терпят неудачу с IndexOutOfBoundsExceptions. Я попытался принудительно запустить RangeChangedEvent после установки страницы, но это не имеет значения (кроме выборки этого диапазона данных дважды.)
Я также пытался не устанавливать страницу и пытаться получить элемент строки , но попытка получить фактический индекс не удалась, как можно было ожидать, поскольку он не на текущей странице, и какой другой индекс вы бы использовали в противном случае?
Я использую GWT 2.8.1 и выполняю оба в контейнере Tomcat и в SuperDevMode в Eclipse + Chrome.
Что мне не хватает?
Спасибо, Линус
Пример вывода журнала ниже:
Set page from 0 to 7
scrollRow:366, scrollCol:4
currentPage:7, start: 350, size: 50
Range start: 350, length:50
getRow:366
java.lang.IndexOutOfBoundsException: Row index: 366, Row size: 2088
getRow:16
java.lang.IndexOutOfBoundsException: Row index: 16, Row size: 2088
getRow:316, // try previous page
java.lang.IndexOutOfBoundsException: Row index: 316, Row size: 2088
getRow:416, // try next page
java.lang.IndexOutOfBoundsException: Row index: 416, Row size: 2088
page:7, rowIdx:366, showRow:366, colIdx: 4 : java.lang.IndexOutOfBoundsException: Row index: 416, Row size: 2088
Чтобы дать контекст код, который производит это
if ( cPage != showPage ) {
GWT.log("Set page from " + cPage + " to " + showPage);
gridPager.setPage(showPage);
}
GWT.log("scrollRow:" + scrollToRow + ", scrollCol:"+ scrollToCol);
GWT.log("currentPage:"+ gridPager.getPage() + ", start: " + gridPager.getPageStart() + ", size: "+ gridPager.getPageSize());
Range range = dataGrid.getVisibleRange();
int start = range.getStart();
GWT.log("Range start: "+ range.getStart() + ", length:" + range.getLength());
TableRowElement row;
try {
int getRow = rowIdx;
GWT.log("getRow:"+getRow);
row = dataGrid.getRowElement(getRow);
} catch (IndexOutOfBoundsException iob0 ) {
GWT.log(String.valueOf(iob0));
try {
int getRow = rowIdx-start;
GWT.log("getRow:"+getRow);
row = dataGrid.getRowElement(getRow);
} catch (IndexOutOfBoundsException iob1 ) {
<snip>
TableCellElement cell = row.getCells().getItem(colIdx);
cell.scrollIntoView();