適切な方法は、セルのレンダリングをオーバーライドし、コンストラクターを介して列構成を渡し、最も重要なこととして、列のフィールド名を格納する場所である DataStoreName を設定できる基本列クラスを拡張することです。最後に、onrangechanged ファイアーを再利用するのではなく、オーバーライドして columnsort ハンドラーに直接アクセスする必要があります。範囲の変更と列の並べ替えハンドラーでは、グリッドを更新する必要がある何らかのタイプのメソッドを呼び出す必要があります。私は正気のために updateGrid と呼んでいます。これにより、非同期リクエストで使用されるグリッド パラメータを特定の並べ替え列と方向に設定できます。列の並べ替えハンドラーを使用する主な理由は、並べ替え方向の情報を含む ColumnSort イベントにアクセスすることです。
ベース GWT 列を拡張する列クラス。日付または数値列も拡張できます。
public GridStringColumn(String fieldName, String text, String tooltip, boolean defaultShown, boolean sortable, boolean hidden) {
super(new TextCell());
setDataStoreName(fieldName);
this.text_ = text;
this.tooltip_ = tooltip;
this.defaultShown_ = defaultShown;
setSortable(sortable);
this.hidden_ = hidden;
}
ハンドラーを作成する
dataGrid.addColumnSortHandler(new DataGridSortEvent());
あなたのソートイベントクラス
protected class DataGridSortEvent implements ColumnSortEvent.Handler {
@Override
public void onColumnSort(ColumnSortEvent event) {
ColumnSortList sortList = dataGrid_.getColumnSortList();
if (sortList != null && sortList.size() > 0) {
Column<T, ?> sortColumn = (Column<T, ?>) sortList.get(0).getColumn();
LOG.info("col_sorta: " + event.isSortAscending());
LOG.info("col_index: " + sortColumn.getDataStoreName());
updateDataList();
}
}
}
updateDataList は、サーバー側に実際の AJAX 要求を行うために使用するメソッドです。ログを記録するのではなく、この情報をデータグリッド クラスのプライベート メンバーに格納して、リクエストがパラメータ化できるようにする必要があります。
updateDataList メソッドを呼び出すのではなく、サーバーからデータのコピーをローカルに作成し、そのキャッシュされたコレクションの並べ替えられたコレクションを返すだけで、ローカル キャッシュでもこれを機能させることができます。
文字列名だけの別のリストを保存する必要がなくなりました。これはメモリの無駄であり、列の順序がユーザーの操作などによって変更された場合の同期性の問題は言うまでもありません。