手动设置页面后 GWT DataGrid getRowElement 抛出 IndexOutOfBoundsException
GWT DataGrid getRowElement throwing IndexOutOfBoundsException after manually setting the page
这个问题 almost 但与 GWT CellTable getRowElement throwing IndexOutOfBoundsException 不完全相同,但是那里接受的答案对我不起作用。
我正在尝试让 DataGrid 显示与当前视图不同的行和单元格。有时这可能在同一页上,但大多数情况下不是。如果该行在当前页面上——第一页或手动分页到的页面——然后使用 getRowElement(rowIdx - pageStart) 获取该行,按照上面提到的答案。
但是,如果行不在当前页面上,我找不到获取行元素的方法。
我已经尝试计算适当的页面并使用 SimplePager.setPage() 设置页面,然后尝试使用实际行索引或基于页面开始的索引(以及尝试之前的页面和之后的页面,只是为了更好的衡量。)所有失败并出现 IndexOutOfBoundsExceptions。我尝试在设置页面后强制触发 RangeChangedEvent,但这没有任何区别(除了两次获取该范围的数据。)
我也试过不设置页面并尝试获取行元素,但是尝试获取实际索引失败了,因为它不在当前页面上,否则您会使用什么其他索引?
我在 Eclipse + Chrome.
的 Tomcat 容器和 SuperDevMode 中使用 GWT 2.8.1 和 运行
我错过了什么?
谢谢,
莱纳斯
示例日志输出如下:
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 用户组的 Thomas Broyer 让我直言不讳:
即使 dataGrid 说它有行,数据分页器实际上并没有提取行。
https://groups.google.com/forum/#!topic/google-web-toolkit/7J8H8yhV_CM
我必须设置一个延续以允许进行提取,然后检索该行以便我可以滚动到它。
这个问题 almost 但与 GWT CellTable getRowElement throwing IndexOutOfBoundsException 不完全相同,但是那里接受的答案对我不起作用。
我正在尝试让 DataGrid 显示与当前视图不同的行和单元格。有时这可能在同一页上,但大多数情况下不是。如果该行在当前页面上——第一页或手动分页到的页面——然后使用 getRowElement(rowIdx - pageStart) 获取该行,按照上面提到的答案。
但是,如果行不在当前页面上,我找不到获取行元素的方法。
我已经尝试计算适当的页面并使用 SimplePager.setPage() 设置页面,然后尝试使用实际行索引或基于页面开始的索引(以及尝试之前的页面和之后的页面,只是为了更好的衡量。)所有失败并出现 IndexOutOfBoundsExceptions。我尝试在设置页面后强制触发 RangeChangedEvent,但这没有任何区别(除了两次获取该范围的数据。)
我也试过不设置页面并尝试获取行元素,但是尝试获取实际索引失败了,因为它不在当前页面上,否则您会使用什么其他索引?
我在 Eclipse + Chrome.
的 Tomcat 容器和 SuperDevMode 中使用 GWT 2.8.1 和 运行我错过了什么?
谢谢, 莱纳斯
示例日志输出如下:
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 用户组的 Thomas Broyer 让我直言不讳:
即使 dataGrid 说它有行,数据分页器实际上并没有提取行。
https://groups.google.com/forum/#!topic/google-web-toolkit/7J8H8yhV_CM
我必须设置一个延续以允许进行提取,然后检索该行以便我可以滚动到它。