2

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

テーブル ヘッダーのみの並べ替えを停止できます。しかし、体はまだ再編成中です。この問題に関する推測はありますか?

4

1 に答える 1

1

ドキュメントには、すべてのsetColumnReorderingAllowed()の並べ替えを制御できるもののみがあります。したがって、あなたのケースが特定のものを制御することである場合、それは非常にカスタムな動作として私には見え、私は独自の実装を使用します. また、アクション自体を処理した後に生成されるため、独自に実装してもここでは役に立たないと思います。ColumnReorderEventColumnReorederListener

変更したい実際のすべての魔法は、 private Table.paintColumnOrder()frompublic Table.paintContent()と呼ばれる from で発生します ( TableTreeTablepublic TreeTable.paintContent()のソースを参照してください)。解決策は次のとおりです。

  1. 拡張するTreeTable
  2. paintContent()と のマージされたコピーTable.paintContent()でオーバーライドTreeTable.paintContent()
  3. paintColumnOrder()call をカスタム ロジックに置き換えます。

アップデート

わかりました。TreeTable をサブクラス化した後、必要なフィールドとメソッドのほとんどにアクセスする簡単な方法がないため、最初に考えたよりもトリッキーであることがわかりました...さらに、列はクライアント側で再格納され、変更イベントのステータスのみが変更されます。サーバーに通知するために送信されます。カスタムgwtウィジェットを作成せずにカスタム並べ替えを処理する方法がわかりません:(

于 2013-05-17T00:06:45.470 に答える