GWT DataGrid getRowElement在手动设置页面后抛出IndexOutOfBoundsException异常

问题描述 投票:0回答:1

这个问题是 几乎 但不完全相同 GWT CellTable getRowElement 抛出 IndexOutOfBoundsException 异常。 然而,那里的公认答案对我来说是行不通的。

我试图让一个DataGrid显示与当前视图不同的行和单元格。 有时可能是在同一页面上,大多数情况下不是。 如果该行在当前页面上--无论是第一页还是已经手动分页的页面--那么使用getRowElement(rowIdx - pageStart)获取该行就可以了,就像上面提到的答案一样。

但是,如果该行不在当前页面上,我没有找到获取该行元素的方法。

我试过计算合适的页面,并使用SimplePager.setPage()设置页面,然后尝试使用实际的行索引或基于页面开始的索引来获取行元素(同时也尝试了之前的页面和之后的页面,只是为了更好的衡量。 都以IndexOutOfBoundsExceptions失败。 我试过在设置页面后强制触发一个RangeChangedEvent,但这没有任何区别(除了两次获取该范围的数据外)。

我还试过不设置页面,并尝试获取行元素,但尝试获取实际的索引失败,因为它不在当前页面上,否则你还会使用什么其他索引?

我使用的是GWT 2.8.1,在Tomcat容器中和Eclipse+Chrome的SuperDevMode中都运行。

我缺少什么?

谢谢,Linus

下面是日志输出的样本。

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();
gwt
1个回答
0
投票

如果有人发现自己在这里。

Thomas Broyer在GWT用户群里给我指点迷津。

尽管dataGrid说它有行,但数据分页器实际上并没有获取行。

https:/groups.google.comforum#!topicgoogle-web-toolkit7J8H8yhV_CM。

我必须设置一个延续,让获取发生,然后检索行,这样我就可以滚动到它。

© www.soinside.com 2019 - 2024. All rights reserved.