【问题标题】:How to quickly add many columns to GWT DataGrid如何快速将多列添加到 GWT DataGrid
【发布时间】:2011-12-16 20:25:24
【问题描述】:

我目前正在尝试创建一个 DataGrid,它可以将具有值列表的实体作为一行。列表中的每个值都位于 DataGrid 中自己的列中。实体的值列表可能具有不同的大小,因此 DataGrid 将具有可变数量的列。我注意到,当我尝试创建 DataGrid 并循环将每个列添加到 DataGrid 的过程时,添加列所需的时间并没有线性增长。

这是我用来测试添加列的速度的代码

DataGrid<String> table = new DataGrid<String>();
table.setPageSize(25);
int NUM_COLUMNS = 40;

for (int i = 0; i < NUM_COLUMNS; i++) {
    GWT.log("Adding column "+i);
    TextColumn<String> nameColumn = new TextColumn<String>() {
        public String getValue(String object) {
        return object;
        }
    };

    table.addColumn(nameColumn, "Column " + i);
    table.setColumnWidth(nameColumn, 100, Unit.PX);
}

ArrayList<String> data = new ArrayList<String>();
for (int i = 0; i < 10; i++) {
    data.add("row "+i);
}

table.setRowCount(data.size(), true);
table.setRowData(0, data);
table.setWidth("100");

每次我运行它大约需要 48 秒,或多或少 1 秒。加载少于 10 列似乎相当快,但随着列数的增加,加载它所花费的时间呈指数增长。

是否有另一种更快的向 DataGrid 添加列的方法?提前致谢。

【问题讨论】:

    标签: gwt datagrid


    【解决方案1】:

    您可能想问自己的一个问题是,是否有更好的方法来做到这一点。具有 40 列 (IMO) 的表似乎效率低下。一般来说,当在DataGrid 中加载超过 15 列时,性能会显着下降,FlexTable 也好不到哪里去。

    我与DataGrid 合作过很多次,但没有看到您所说的任何行为,尽管在我的情况下,它们通常只有 10 或更少的列和数千行。 (数据当然是分页的,不会一下子塞进去。)

    我注意到加速它的一件事是预渲染。您是在添加所有这些列之前将表添加到 DOM,还是先将它们全部添加?可能会花费大量时间等待 DOM 更新。如果您在渲染所有内容后将其添加到页面中,您可能会看到您将获得的最佳速度,因为没有用于同时添加多个列的内置函数。

    【讨论】:

    • 这就是我所担心的。这些列是必需的,大多数情况下少于 15 个,但少数有几十个。我最后为 DataGrid 设置了行数据,就像上面一样,所以我想我将不得不尝试找到一种创造性的方式来处理列。还是谢谢你。希望其他人可能有一个想法。
    猜你喜欢
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 2015-11-03
    • 2019-06-05
    • 2014-01-07
    相关资源
    最近更新 更多