我正在Vaadin 7做一个项目。
在我的项目中,我需要为Treetable中的特定列禁用列重新排序功能吗?
我真的在寻找像'setColumnReorderIds()'这样的函数。
是否可以在Vaadin 7中完成。
否则我需要用'ColumnReorderListener()'编写一些代码?
更新
此代码用于设置TreeTable中固定的第一列。我想在树表中的Hierarchy列中禁用重新排序。
public class CustomTreeTable extends TreeTable {
private static final long serialVersionUID = 1L;
private Object[] visibleColumns;
private KeyMapper<Object> columnIdMap = new KeyMapper<Object>();
@Override
public void paintContent(PaintTarget target) throws PaintException {
super.paintContent(target);
paintColumnOrder(target);
}
private void paintColumnOrder(PaintTarget target) throws PaintException {
visibleColumns = this.getVisibleColumns();
final String[] colorder = new String[visibleColumns.length];
int i = 0;
colorder[i++] = columnIdMap.key("Column 1"); // Logic to keep the first column fixed
for (Object colId : visibleColumns) {
if(!colId.equals("Column 1")) {
colorder[i++] = columnIdMap.key(colId);
}
}
target.addVariable(this, "columnorder", colorder);
}
}
更新2
我尝试过奥斯卡说的话。
除了
paintColumnOrder(target).
我正在打电话
paintVisibleColumnOrder(target),
paintAvailableColumns(target),
paintVisibleColumns(target).
我只能停止对表头进行重新排序。但是,身体仍在重新排序。有关这个问题的任何猜测吗?
答案 0 :(得分:1)
在文档中,只有setColumnReorderingAllowed()
允许控制所有列的重新排序。因此,如果你的情况是控制特定的,它看起来像一个非常自定义的行为,我会采用自己的实现。另外{<1}}在处理动作本身后生成,因此实现自己的ColumnReorderEvent
无法帮助我们。
我们想要更改的所有实际魔法都发生在ColumnReorederListener
来自private Table.paintColumnOrder()
的{{1}},来自public Table.paintContent()
(请参阅Table和TreeTable的来源)。解决方案是:
public TreeTable.paintContent()
TreeTable
和paintContent()
Table.paintContent()
TreeTable.paintContent()
来电。<强>更新强>
好的,现在我觉得它比我在beginnig上想的更棘手,因为在子类化TreeTable之后没有简单的方法来访问大多数必需的字段和方法...此外,在客户端上重新列出了列并且仅发送更改事件状态以通知服务器。我不知道如何在不创建自定义gwt小部件的情况下处理自定义重新排序:(