删除GWT数据网格中的一行,而不滚动到网格顶部
我有一个datagrid,每页可以显示许多行。假设我每页显示25行。但是,栅格的可视区域只有10行。i、 e.整个网格只有400px,每行为40px。所以网格上有一个滚动条 删除网格中的一行时,网格将自动移动到网格中的第一行。如果我滚动了底部并删除了最后一行,我将再次移动到第一行 我尝试了几种方法来解决这个问题,但我找不到一个我想要的解决方案 我已经尝试使用scrollIntoView()方法将删除行之前或之后的行直接滚动到视图中 我试图弄清楚在删除之前如何确定哪些行在可见范围内,但是getVisibleRange()方法与页面范围相关,而不是实际显示的范围 我在网上搜索过这个问题,似乎只有我有这个问题。我缺少什么?如果您使用管理DataGrid的数据,则在删除/添加项目时DataGrid将不会滚动 下面是一个在不进行任何滚动的情况下删除网格行的最小示例(所有行都包含在入口点类中): 数据网格行的类: 填充数据网格: 这里我使用一个私有变量,删除GWT数据网格中的一行,而不滚动到网格顶部,gwt,Gwt,我有一个datagrid,每页可以显示许多行。假设我每页显示25行。但是,栅格的可视区域只有10行。i、 e.整个网格只有400px,每行为40px。所以网格上有一个滚动条 删除网格中的一行时,网格将自动移动到网格中的第一行。如果我滚动了底部并删除了最后一行,我将再次移动到第一行 我尝试了几种方法来解决这个问题,但我找不到一个我想要的解决方案 我已经尝试使用scrollIntoView()方法将删除行之前或之后的行直接滚动到视图中 我试图弄清楚在删除之前如何确定哪些行在可见范围内,但是getVi
data
,来保存DataGrid的项。注意,我们必须通过addDataDisplay
方法将dataGrid
附加到data
ListDataProvider data;
public void onModuleLoad() {
// build grid:
DataGrid dataGrid = new DataGrid();
BuildColumns(dataGrid);
dataGrid.setWidth("300px");
dataGrid.setHeight("300px");
// add items:
data = new ListDataProvider();
for(int i = 1; i < 25; i++){
data.getList().add(new Item("Item " + i, i));
}
data.addDataDisplay(dataGrid);
// display:
RootPanel.get().add(dataGrid);
}
我将这段代码放在一个新的GWT项目中并进行了测试。删除行时DataGrid不会滚动。我也有同样的问题,我发现如果DataGrid有错误,就会出现错误
keyboardSelectionPolicy=“BOUND_TO_SELECTION”我不确定,但也许在您的情况下,将重点放在数据网格上也会有所帮助(?)Chris-感谢您的回复,但在这种情况下,这似乎不起作用。读到那篇文章我很兴奋,但没有这么幸运。同样的行为依然存在。谢谢你的回复,马特。我已经离开了这个问题,但我会调查你的反应,并勾选该框,如果它对我有效!
ListDataProvider data;
public void onModuleLoad() {
// build grid:
DataGrid dataGrid = new DataGrid();
BuildColumns(dataGrid);
dataGrid.setWidth("300px");
dataGrid.setHeight("300px");
// add items:
data = new ListDataProvider();
for(int i = 1; i < 25; i++){
data.getList().add(new Item("Item " + i, i));
}
data.addDataDisplay(dataGrid);
// display:
RootPanel.get().add(dataGrid);
}
private void BuildColumns(DataGrid dataGrid){
Column textCol = new Column(new SafeHtmlCell()) {
@Override
public SafeHtml getValue(Item object) {
SafeHtmlBuilder sb = new SafeHtmlBuilder();
sb.appendEscaped(object.text);
return sb.toSafeHtml();
}
};
dataGrid.addColumn(textCol);
dataGrid.setColumnWidth(textCol, 75, Unit.PCT);
Column deleteCol = new Column(new ButtonCell()) {
@Override
public String getValue(Item object) {
return "Delete " + object.value;
}
};
deleteCol.setFieldUpdater(new FieldUpdater() {
@Override
public void update(int index, Item object, String value) {
data.getList().remove(index);
data.refresh();
}
});
dataGrid.addColumn(deleteCol);
}