2011-11-18 15 views

Trả lời

12

Bạn có thể sử dụng getColumnSortList() và đẩy cột mà bạn muốn sắp xếp theo, như vậy:

dataGrid.getColumnSortList().push(columnToSortBy); 

Bảng sẽ được sắp xếp theo cột được đưa ra trong thứ tự tăng dần.

Gọi phương thức này hai lần, sẽ kích hoạt kiểm tra để kiểm tra nếu cột đã được đưa vào danh sách và nếu được sắp xếp theo thứ tự giảm dần, để có được bảng được sắp xếp theo cột theo thứ tự giảm dần:

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

Đằng sau hiện trường, cột được đẩy vào một danh sách bên trong bảng gọi là ColumnSortList vị trí 0. các danh sách tương tự được cập nhật trên mỗi nhấp chuột tiêu đề cột.

Đảm bảo bạn gọi phương thức này sau khi bạn đã khởi tạo cột.

+4

Tôi đang gọi push() hai lần liên tiếp như được hiển thị nhưng, mặc dù mũi tên hiển thị nó như được sắp xếp hai lần, dữ liệu thực tế thì không. Không thể nghĩ tại sao điều này lại xảy ra. – slugmandrew

+0

giống như ở đây, tôi không biết tại sao –

+2

Tôi đã gặp vấn đề đó và chỉ đăng giải pháp làm câu trả lời thay thế. –

6

Tôi khuyên bạn nên truy xuất dữ liệu bạn sắp hiển thị đã được sắp xếp. Nếu đó là trường hợp sau đó bạn chỉ cần thiết lập các biểu tượng phân loại chính xác (tăng dần hoặc giảm dần):

/** 
* 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); 
      } 
     } 
} 

Nếu dữ liệu không thể được sắp xếp trước khi lấy bạn có thể sắp xếp danh sách giống như cách bạn làm điều đó khi một người dùng nhấp vào tiêu đề (onColumnSort(ColumnSortEvent event) với Comparator) trước khi bạn hiển thị tiêu đề.

+0

Mã của bạn rất hữu ích. Cảm ơn bạn. – slugmandrew

+0

Điều này rất hữu ích để đảm bảo rằng sắp xếp mặc định không chuyển đổi giữa tăng dần và giảm dần khi sử dụng giải pháp của Jeff Allen. –

24

Để làm rõ một số câu trả lời hiện có ... một danh sách sắp xếp của cellTable (được truy cập bởi hàm getColumnSortList()) chỉ xác định trạng thái của tiêu đề của bảng, nhưng không thực sự sắp xếp bất kỳ dữ liệu nào.

Như @ z00bs đề xuất, có thể khôn ngoan khi sắp xếp dữ liệu từ bên ngoài, nếu có thể. Nếu bạn biết rằng dữ liệu sẽ được sắp xếp trước, thì bạn nên sử dụng các hàm getColumnSortList().clear()getColumnSortList().push() để liên lạc với người dùng của bạn cách dữ liệu được sắp xếp.

Nếu, tuy nhiên, bạn muốn CellTable thực sự sắp xếp dữ liệu, bạn sẽ cần kích hoạt sự kiện để buộc CellTable thực sự sắp xếp thành phần dữ liệu phía máy khách. Để làm điều này, bạn có thể sử dụng phương thức nhà nước ColumnSortEvent.fire(), như vậy:

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

này sẽ kích hoạt một sự kiện mà xử lý việc phân loại các dữ liệu dựa trên tình trạng hiện thời của tiêu đề. Vì vậy, bạn có thể đặt trạng thái sắp xếp ban đầu mong muốn của tiêu đề đầu tiên, và sau đó thực hiện dòng này để thực sự làm cho thứ tự dữ liệu phản ánh trạng thái sắp xếp hiện tại được biểu diễn trong tiêu đề.

+1

Tôi đã sử dụng câu trả lời này để trợ giúp với cột sắp xếp lại sau khi áp dụng các bộ lọc nhất định trên các cột. Cảm ơn! – Devesh

+0

Oooooooooooooooooooooooh Tôi nghĩ mình đã phát điên, cảm ơn :) – Manu

Các vấn đề liên quan