删除列后GWT DataGrid列宽问题

删除列后GWT DataGrid列宽问题,gwt,datagrid,Gwt,Datagrid,在我们的GWT应用程序中,我们创建一个DataGrid并用N列填充它。在某些特定条件下,我们需要从DataGrid中删除两列。当我们这样做时,我们遇到了一个问题,即列宽被移动到以前的列数,从而导致DataGrid没有采用完全正确的宽度 通过检查DataGrid的Html代码,我们发现在从DataGrid中删除一列后,表的colgroup元素包含与以前的列数量相匹配的col元素。因此,这些colgroup元素正在破坏布局 重置列宽DataGrid width,调用DataGrid.redraw()

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

通过检查DataGrid的Html代码,我们发现在从DataGrid中删除一列后,表的colgroup元素包含与以前的列数量相匹配的col元素。因此,这些colgroup元素正在破坏布局

重置列宽DataGrid width,调用DataGrid.redraw()对此没有帮助。是否有任何变通方法或解决方案?

这是一个问题,问题跟踪程序中提出了一些(部分)变通方法。这个问题已经被诊断出来了,但据我所知,没有人尝试将它变成补丁,这是它在近4年后仍未修复的唯一原因(换言之:似乎没有人足够关心它)



注意:鉴于Google代码托管即将关闭,问题跟踪程序将被移至GitHub。如果您阅读了本文,但上面的链接不起作用,请尝试搜索以将解决方案保留在此页面上(由于谷歌代码关闭),我会重新发布在Thomas Broyer提供的上找到的答案:

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));
        }
    }
}
public static void removeUnusedDataGridColumns(DataGrid DataGrid){
int columnCount=dataGrid.getColumnCount();
NodeList colGroups=dataGrid.getElement().getElementsByTagName(“colgroup”);
对于(int i=0;i=columnCount;j--){
colGroupEle.removeChild(colList.getItem(j));
}
}
}