2011-07-11 5 views
0

私はGWT CellTableをソートしようとしている最後のカップルのために苦労してきました。 それはここ http://gwt.google.com/samples/Showcase/Showcase.html#!CwCellTableGWTセルテーブルをソートする、おそらくちょうど私が見たことがない

行われていますので、それは本当に愚かな問題だが、私は私がexempleに欠けているものを理解していない...ここで

は、私が列を作成するために使用する私のコードです:

Column<RemoteCommand, String> nbProducts = new Column<RemoteCommand, String>(
       new TextCell()) { 
       @Override 
       public String getValue(RemoteCommand object) { 
       return object.getNumberProduct(); 
       } 
      }; 
      nbProducts.setSortable(true); 
      sortHandler.setComparator(nbProducts, new Comparator<RemoteCommand>() { 
       public int compare(RemoteCommand o1, RemoteCommand o2) { 
cellTable.redraw(); 
        return o1.getCommandSize().compareTo(o2.getCommandSize()); 
        // System.out.println(Integer.parseInt(o1.getCommandSize()) - Integer.parseInt(o2.getCommandSize())); 
        // return Integer.parseInt(o1.getCommandSize()) - Integer.parseInt(o2.getCommandSize()); 
       } 
      }); 

そして、ここでは、テーブル自体の宣言です:

// Add a selection model so we can select cells. 
final SelectionModel<RemoteCommand> selectionModel = new MultiSelectionModel<RemoteCommand>(
      RemoteCommand.KEY_PROVIDER); 
cellTable.setSelectionModel(selectionModel, 
DefaultSelectionEventManager.<RemoteCommand> createCheckboxManager()); 


// Attach a column sort handler to the ListDataProvider to sort the list. 
    ListHandler<RemoteCommand> sortHandler = new ListHandler<RemoteCommand>(values); 
cellTable.addColumnSortHandler(sortHandler); 

// Initialize the columns. 
initTableColumns(selectionModel, sortHandler); 

cellTable.setRowData(values); 

ヘルプはrequierdです:)

答えて

2

私はあなたが既に解決策を見つけたが、ちょうどここでそれを維持するために推測:

まず、いくつかの既知のリストにあなたのdataProviderを作成します。 同じリストのあるフィードsortHandler。 を使用して、リストを使用してデータを更新します。 CelltableはdataProviderののdataDisplayとして設定する必要があります。

List myDataList = new ArrayList(); 
ListDataProvider dataProvider = new ListDataProvider(KEY_PROVIDER); 
dataProvider.setList(myDataList); 
ListHandler sortHandler = new ListHandler(dataProvider.getList); 
//tie provider and table 
dataProvider.addDataDisplay(cellTable); 

//when you need to update dataprovider 
//first do some myDataList cleanup to remove old values 
myListData.addAll(values); 
//update data displays 
dataProvider.refresh(); 

を考えてみましょう、あなたは常に1と同じListオブジェクトを使用する必要があります。

+0

これは私の考えであり、正確にはどのように行われたのですか?ただ1つのこと: リストを変更したときに更新が完了したため、更新は不要です。私の経験では、myDataListを使用する代わりにdataProvider.getList() - Methodを使用しなければなりませんでした。そうでなければ、起動された更新はありませんでした。 – Chris

+0

Chirs、あなたはまったく正しい! dataProvider.getList()を使用する方が良いです! 実際には、myDataListを変更するのは問題ありませんが、refresh()が必要です。最も重要なのは、myDataListを更新するとページングの動作が不正になります(テーブルを作成するときにデータがない場合 - ソートは完了です)。 ありがとうございます。 – sab