2011-11-18 2 views
16

셀 테이블이 Gwt입니다. 머리글을 클릭하면 열이 적절하게 정렬됩니다. 하지만 페이지로드시 기본적으로 열은 정렬되지 않습니다. 페이지를로드 할 때 가장 오른쪽의 열을 정렬하도록하고 싶습니다.Gwt celltable이 열 정렬을 호출합니다.

답변

12

당신은 같이 getColumnSortList()를 사용하고 정렬 기준으로 사용할 열을 밀어 수 있습니다

dataGrid.getColumnSortList().push(columnToSortBy); 

테이블은 오름차순으로 주어진 열을 기준으로 정렬됩니다.

이 메서드를 두 번 호출하면 지정된 열이 이미 목록에 푸시되었는지 확인하고, 그렇다면 내림차순으로 정렬되어 열을 기준으로 내림차순으로 정렬 된 표를 가져옵니다.

장면 뒤에
dataGrid.getColumnSortList().push(columnToSortBy); 
dataGrid.getColumnSortList().push(columnToSortBy); 

열은 동일한리스트는 각 열에 헤더 클릭 갱신되는 위치를 0이라 ColumnSortList 테이블 내 목록에 푸시된다.

열을 초기화 한 후에이 메서드를 호출해야합니다.

+4

표시된 것처럼 push()를 두 번 호출하고 있지만 화살표에 두 번 정렬 된 것으로 표시되어 있지만 실제 데이터는 표시되지 않습니다. 왜 이런 일이 일어나고 있는지 생각할 수 없습니다. – 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

관련 문제