2011-11-18 15 views
16

私はGwtセルテーブルを持っています。ヘッダーをクリックすると、列が正しくソートされます。 しかし、ページの読み込みでは、列はデフォルトでソートされません。 ページが読み込まれたときに最も右の列をソートするようにしたい。Gwt celltableは列のソートを呼び出す

答えて

12

は、次のような、getColumnSortList()を使用して、ソートする列をプッシュすることができます:

dataGrid.getColumnSortList().push(columnToSortBy); 

テーブルが昇順で指定された列でソートされます。

このメソッドを2回呼び出すと、指定された列が既にリストにプッシュされているかどうかを確認するトリガーとなります。降順でソートされた表を取得するには、降順でソートされます。シーンの背後

dataGrid.getColumnSortList().push(columnToSortBy); 
dataGrid.getColumnSortList().push(columnToSortBy); 

、カラムを同じリスト0の位置にColumnSortListと呼ばれるテーブル内の内部リストは、各列ヘッダーのクリックで更新さにプッシュされます。

列を初期化した後にこのメソッドを呼び出すようにしてください。

+4

私はpush()を2行続けて呼び出していますが、矢印は2回ソートされているように示していますが、実際のデータは表示されません。なぜこれが起こっているのか考えられない。 – slugmandrew

+0

ここで同じですが、なぜわかりません –

+2

私はその問題を抱えていましたが、代わりの回答として解決策を投稿しました。 –

6

すでにソートされているデータを取得することをお勧めします。その場合は、あなたはそれからのみ、正しいアイコンの並べ替え(昇順または降順)を設定する必要があります。

/** 
* Displays the appropriate sorted icon in the header of the column for the given index. 
* 
* @param columnIndex 
*   of the column to mark as sorted 
* @param ascending 
*   <code>true</code> for ascending icon, <code>false</code> for descending icon 
*/ 
public void setSortedColumn(int columnIndex, boolean ascending) { 
     Column<T, ?> column = table.getColumn(columnIndex); 
     if (column != null && column.isSortable()) { 
      ColumnSortInfo info = table.getColumnSortList().push(column); 
      if (info.isAscending() != ascending) { 
       table.getColumnSortList().push(column); 
      } 
     } 
} 

データがリストにあなたがそれを行うのと同じ方法で並べ替えることができます取得する前にソートすることができない場合ユーザーは、表示する前にヘッダー(onColumnSort(ColumnSortEvent event)Comparator)をクリックします。

+0

あなたのコードは非常に役に立ちました。ありがとうございました。 – slugmandrew

+0

これは、Jeff Allenのソリューションを使用しているときに、デフォルトソートが昇順と降順の間で繰り返されないようにするのに便利でした。 –

24

cellTableのソートリスト(getColumnSortList()関数によってアクセスされる)は、テーブルのヘッダーの状態がどのように決定されるかを決定しますが、は実際にデータを並べ替えません。

@ z00bsで提案されているように、可能であれば、データを外部でソートするのが賢明かもしれません。データが事前ソートされることがわかっている場合は、getColumnSortList().clear()およびgetColumnSortList().push()関数を使用して、データのソート方法をユーザーに伝える必要があります。

しかし、CellTableでデータを実際に並べ替える場合は、イベントをトリガーして、CellTableがクライアント側で構成データを実際にソートするようにする必要があります。これを行うには、次のような、状態ColumnSortEvent.fire()方法を使用することができます。

ColumnSortEvent.fire(myTable, myTable.getColumnSortList()); 

これは、ヘッダの現在の状態に基づいてデータのソート処理を行うイベントがトリガされます。したがって、最初にヘッダーの目的の初期ソート状態を設定してから、この行を実行して、ヘッダーに表示されている現在のソート状態をデータ順序に反映させることができます。

+1

私はこの回答を使用して、列に特定のフィルタを適用した後に列を並べ替えるのを助けました。ありがとう! – Devesh

+0

Oooooooooooooooooooooooh私は夢中になると思った、ありがとう:) – Manu

関連する問題