簡體   English   中英

刪除GWT Datagrid中的行而不滾動到網格的頂部

[英]Remove a row in a GWT Datagrid without scrolling to the top of the grid

我有一個數據網格,每頁可能會顯示很多行。 假設我每頁顯示25行。 然而,網格的可視區域僅為10行。 即整個網格只有400px,每行為40px。 所以網格上有一個滾動條。

當我刪除網格中的單行時,網格會自動移動到網格中的第一行。 如果我滾動了底部並刪除了最后一行,我再次移動到第一行。

我曾嘗試過多種方法來解決這個問題,但我找不到一種能夠按照我想要的方式運行的解決方案。

我嘗試使用scrollIntoView()方法將刪除行之前或之后的行直接滾動到視圖中。

我已經嘗試弄清楚在刪除之前如何確定哪些行在可見范圍內,但是getVisibleRange()方法與頁面范圍相關,而不是實際顯示的范圍。

我在網上搜索過這個,看起來我是唯一有這個問題的人。 我錯過了什么?

我有同樣的問題,我發現如果dataGrid有keyboardSelectionPolicy =“BOUND_TO_SELECTION”,則會發生錯誤

如果使用ListDataProvider來管理DataGrid的數據,則在刪除/添加項時DataGrid將不會滾動。

下面是一個刪除網格行而不進行任何滾動的最小示例(全部包含在入口點類中):

DataGrid行的類:



    private class Item{
        public String text;
        public int value;
        public Item(String text, int value){
            this.text = text;
            this.value = value;
        }
    }

填充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);
    }

構建DataGrid:

此私有方法用於構建DataGrid的列。 在用於監聽按鈕列的單擊事件的delCol的delCol內部,我們從data刪除相應的項目,並調用data.refresh()來更新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);
    }

我將此代碼放在一個新的GWT項目中並進行測試。 刪除行時,DataGrid不會滾動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM