删除列后的GWT DataGrid列宽问题

时间:2015-06-10 14:01:12

标签: gwt datagrid

在我们的GWT应用程序中,我们创建一个DataGrid并用N列填充它。在某些特定条件下,我们需要从DataGrid中删除几列。当我们这样做时,我们遇到的问题是列宽度移动到之前的列数,导致DataGrid没有采用完全合适的宽度。

检查DataGrid的Html代码,我们发现从DataGrid中删除一个列后,该表的 colgroup 元素包含与之前的旧元素匹配的 col 元素列数。因此,那些 colgroup 元素正在打破布局。

重置列宽,DataGrid宽度,调用DataGrid.redraw()对此没有帮助。有没有解决方法或解决方案?

2 个答案:

答案 0 :(得分:2)

这是known issue,问题跟踪器中提出了几个(部分)解决方法。这个问题已被诊断出来,但据我所知,没有人把它变成一个补丁,这是它在近4年后仍未修复的唯一原因(换句话说:似乎没有人关心它)

注意:鉴于Google Code Hosting即将关闭,问题跟踪器正在转移到GitHub。如果您阅读此内容并且上述链接无效,请尝试搜索issues in the GitHub project

答案 1 :(得分:1)

要在此页面上保留解决方案(由于Google代码已关闭),我会重新发布在Thomas Broyer提供的link上找到的答案:

public static void removeUnusedDataGridColumns(DataGrid<?> dataGrid) {
    int columnCount = dataGrid.getColumnCount();
    NodeList<Element> colGroups = dataGrid.getElement().getElementsByTagName("colgroup");

    for (int i = 0; i < colGroups.getLength(); i++) {
        Element colGroupEle = colGroups.getItem(i);
        NodeList<Element> colList = colGroupEle.getElementsByTagName("col");

        for (int j = colList.getLength()-1; j >= columnCount; j--) {
            colGroupEle.removeChild(colList.getItem(j));
        }
    }
}