2

我正在 Vaadin 7 中做一个项目。

在我的项目中,我需要为 Treetable 中的特定列禁用列重新排序功能?

我真的在寻找像“setColumnReorderIds()”这样的函数。

是否有可能在 Vaadin 7 中做到这一点。

或者我需要用'ColumnReorderListener()'编写一些代码?

更新

此代码是将第一列设置为固定在 TreeTable 中。我想在树表的层次结构列中禁用重新排序。

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). 

我只能停止对表头重新排序。但是,身体仍在重新排序。对这个问题有任何猜测吗?

4

1 回答 1

1

在文档中,只有setColumnReorderingAllowed()它允许控制所有列的重新排序。因此,如果您的情况是要控制特定的情况,那么它在我看来是一种非常自定义的行为,我会使用自己的实现。也是在处理动作本身之后ColumnReorderEvent生成的,因此我认为实现自己的在这里对我们没有帮助。ColumnReorederListener

我们想要改变的所有实际魔法都发生在private Table.paintColumnOrder()调用 from public Table.paintContent(),调用 from public TreeTable.paintContent()(参见TableTreeTable的来源)。解决方案是:

  1. 延长TreeTable
  2. 用和paintContent()的合并副本覆盖Table.paintContent()TreeTable.paintContent()
  3. paintColumnOrder()用您的自定义逻辑替换呼叫。

更新

好的,现在我发现它比我在开始时想的更棘手,因为在子类化 TreeTable 之后没有简单的方法来访问大多数必需的字段和方法......此外,列在客户端重新排列,只有更改事件状态发送通知服务器。我不知道如何在不创建自定义 gwt 小部件的情况下处理自定义重新排序:(

于 2013-05-17T00:06:45.470 回答