删除GWT数据网格中的一行,而不滚动到网格顶部

删除GWT数据网格中的一行,而不滚动到网格顶部,gwt,Gwt,我有一个datagrid,每页可以显示许多行。假设我每页显示25行。但是,栅格的可视区域只有10行。i、 e.整个网格只有400px,每行为40px。所以网格上有一个滚动条 删除网格中的一行时,网格将自动移动到网格中的第一行。如果我滚动了底部并删除了最后一行,我将再次移动到第一行 我尝试了几种方法来解决这个问题,但我找不到一个我想要的解决方案 我已经尝试使用scrollIntoView()方法将删除行之前或之后的行直接滚动到视图中 我试图弄清楚在删除之前如何确定哪些行在可见范围内,但是getVi

我有一个datagrid,每页可以显示许多行。假设我每页显示25行。但是,栅格的可视区域只有10行。i、 e.整个网格只有400px,每行为40px。所以网格上有一个滚动条

删除网格中的一行时,网格将自动移动到网格中的第一行。如果我滚动了底部并删除了最后一行,我将再次移动到第一行

我尝试了几种方法来解决这个问题,但我找不到一个我想要的解决方案

我已经尝试使用scrollIntoView()方法将删除行之前或之后的行直接滚动到视图中

我试图弄清楚在删除之前如何确定哪些行在可见范围内,但是getVisibleRange()方法与页面范围相关,而不是实际显示的范围

我在网上搜索过这个问题,似乎只有我有这个问题。我缺少什么?

如果您使用管理DataGrid的数据,则在删除/添加项目时DataGrid将不会滚动

下面是一个在不进行任何滚动的情况下删除网格行的最小示例(所有行都包含在入口点类中):

数据网格行的类: 填充数据网格: 这里我使用一个私有变量,
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);
    }