2010-07-16 68 views

回答

3

CellTable上还没有支持Sort的方式。然而,有一个手动解决方法涉及到很多代码苦差事。根据费用样本,请参阅自行车棚中的SortableHeaderSortableColumn。您将在com.google.gwt.sample.expenses.gwt.client.ExpenseDetails中找到用法。你可以使用它,直到下一个版本的具体内容出现。

退房目录:http://google-web-toolkit.googlecode.com/svn/trunk/bikeshed

+2

好像链接不再有效。试试这一个http://code.google.com/p/google-web-toolkit/source/browse/branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ – stuff22 2010-11-19 17:45:56

+0

@ stuff22编辑答案。 – 2013-05-28 21:01:29

0

使用GWT 2.1的最终版本,还没有被添加到CellTable对排序的列任何支持?或者,在看过自行车的例子之后,它仍然是自己的解决方案吗?

8

解决方法click事件:

Header<String> columnHeader = new Header<String>(new ClickableTextCell()) { 
    @Override 
    public String getValue() { 
     return columnName; 
    } 
}; 

columnHeader.setUpdater(new ValueUpdater<String>() { 
    @Override 
    public void update(String value) { 
     Window.alert("Header clicked!"); 
    } 
}); 

table.addColumn(column, columnHeader); 
0
CellTable<Contact> table = new CellTable<Contact>(); 

    // Create name column. 
    final TextColumn<Contact> nameColumn = new TextColumn<Contact>() { 
     @Override 
     public String getValue(Contact contact) { 
     return contact.name; 
     } 
    }; 
    // Create a data provider. 
    ListDataProvider<Contact> dataProvider = new ListDataProvider<Contact>(); 

    // Connect the table to the data provider. 
    dataProvider.addDataDisplay(table); 
    final List<Contact> list = dataProvider.getList(); 
    for (Contact contact : CONTACTS) { 
     list.add(contact); 
    } 
    final ListHandler<Contact> columnSortHandler = new ListHandler<Contact>(
      list); 
    Header<String> columnHeader = new Header<String>(new ClickableTextCell()) { 
     @Override 
     public String getValue() { 
      return "Name"; 
     } 
    }; 

    columnHeader.setUpdater(new ValueUpdater<String>() { 
     @Override 
     public void update(String value) { 
      if (Window.confirm("Want to do?")){ 
       nameColumn.setSortable(true); 
       columnSortHandler.setComparator(nameColumn, 
         new Comparator<Contact>() { 
          public int compare(Contact o1, Contact o2) { 
          if (o1 == o2) { 
           return 0; 
          } 

          // Compare the name columns. 
          if (o1 != null) { 
           return (o2 != null) ? o1.name.compareTo(o2.name) : 1; 
          } 
          return -1; 
          } 
         }); 
      } else nameColumn.setSortable(false); 
     } 
    }); 
    // Make the name column sortable. 
    nameColumn.setSortable(false); 

    // Create address column. 
    TextColumn<Contact> addressColumn = new TextColumn<Contact>() { 
     @Override 
     public String getValue(Contact contact) { 
     return contact.address; 
     } 
    }; 

    // Add the columns. 
    table.addColumn(nameColumn, columnHeader); 
    table.addColumn(addressColumn, "Address"); 




    // Add the data to the data provider, which automatically pushes it to the 
    // widget. 


    // Add a ColumnSortEvent.ListHandler to connect sorting to the 
    // java.util.List. 
    //------------------ Code to add --------------------------------// 
    VerticalPanel vp = new VerticalPanel(); 




    table.addColumnSortHandler(columnSortHandler); 
    //------------------ Code end --------------------------------// 
    // We know that the data is sorted alphabetically by default. 
    table.getColumnSortList().push(nameColumn); 

    // Add it to the root panel. 
    vp.add(table); 
    RootPanel.get().add(vp);