在我们的GWT应用程序中,我们创建一个DataGrid并用N列填充它。在某些特定条件下,我们需要从DataGrid中删除几列。当我们这样做时,我们遇到的问题是列宽度移动到之前的列数,导致DataGrid没有采用完全合适的宽度。
检查DataGrid的Html代码,我们发现从DataGrid中删除一个列后,该表的 colgroup 元素包含与之前的旧元素匹配的 col 元素列数。因此,那些 colgroup 元素正在打破布局。
重置列宽,DataGrid宽度,调用DataGrid.redraw()对此没有帮助。有没有解决方法或解决方案?
答案 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));
}
}
}