0

新規追加時にCellTableの行をソートしたい。

UI をマークアップするには、UIBinder を使用します。

<g:HTMLPanel>
<c:CellTable pageSize='100' ui:field='myTable'/>
<c:SimplePager ui:field='myPager' location='CENTER'/>
</g:HTMLPanel>

ウィジェットで、テーブルとページネーションを作成しました:

@UiField(provided=true) CellTable<myDTO> myTable;
SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class);
myPager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true);
myTable = new CellTable<myDTO>();

次に、選択モデルをインストールしました。

final NoSelectionModel<myDTO> selectionModel = new NoSelectionModel<myDTO>();
selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
   public void onSelectionChange(SelectionChangeEvent event) {
      clickedObject = selectionModel.getLastSelectedObject();
   }
});     

myTable.setPageSize(50);
myTable.setSelectionModel(selectionModel);

そして、いくつかの列を追加しました:

Column<myDTO, String> column1 = new Column<myDTO, String>(new TextCell()) {
   @Override
   public String getValue(myDTO data) {
      return data.getSomeData1();
   }
};

Column<myDTO, String> column2 = new Column<myDTO, String>(new TextCell()) {
   @Override
   public String getValue(myDTO data) {
      return data.getSomeData2();
   }
};
...
Column<myDTO, String> columnN = new Column<myDTO, String>(new TextCell()) {
   @Override
   public String getValue(myDTO data) {
      return data.getSomeDataN();
   }
};      

myTable.addColumn(column1, "name of column1");
myTable.addColumn(column2, "name of column2");
...
myTable.addColumn(columnN, "name of columnN");

次に、次を作成しますAsyncDataProvider

AsyncDataProvider<myDTO> provider = new AsyncDataProvider<myDTO>() {
   @Override
   // is called when the table requests a new range of data 
   protected void onRangeChanged(HasData<myDTO> display) {

      final int start = display.getVisibleRange().getStart();
      final int lenght = display.getVisibleRange().getLength();

       myService.findAll(new AsyncCallback<List<myDTO>>() {
          public void onFailure(Throwable caught) {
             // exception handling here
          }

          public void onSuccess(List<myDTO> data) {
             updateRowCount(data.size(), true);
             updateRowData(0, data);
          }
      });
   }
 };

 provider.addDataDisplay(myTable);

このアプローチを使用すると、新しい行がテーブルの最後に追加されます。

追加時に行を自動的にソートする必要があります。

どうすればいいですか?

4

1 に答える 1

1

プロバイダーを作成した直後に並べ替えハンドラーを作成します。

ListHandler<myDTO> sortHandler = new ListHandler<myDTO>(provider.getList());
myTable.addColumnSortHandler(sortHandler);

次に、ソートする列ごとにコンパレータを設定し、その列をソートリストに追加します。次に例を示します。

sortHandler.setComparator(column1, new Comparator<myDTO>() {
    public int compare(myDTO dto1, myDTO dto2) {
        // This is an example, how you compare them depends on the context
        return dto1.getSomeData1().compareTo(dto2.getSomeData1());
    }
});

myTable.getColumnSortList().push(column1);

push()メソッドを複数回呼び出して、複数の列で並べ替えることができます。同じ列に対して 2 回呼び出して、並べ替え順序を逆にすることもできます (昇順/降順)。

于 2013-10-09T03:07:16.473 に答える