1
votes

I have a working Datagrid in my application and i am trying to let one of the columns be sortable.

  public static final ProvidesKey<String> KEY_PROVIDER = new ProvidesKey<String>() {
    @Override
    public Object getKey(String item) {
      return item;
    }
  };

here is how I create it

DataGrid<String> dataGrid = new DataGrid<String>(KEY_PROVIDER);

here is my list handler

ListHandler<String> sortHandler = new ListHandler<String>(dataGridProvider.getList());
dataGrid.addColumnSortHandler(sortHandler);

Here is the column I want to be sortable

  // Add partner id column
  Column<String, String> partnerIdColumn =
      new Column<String, String>(new TextCell()) {
    @Override
    public String getValue(String object) {
      return object;
    }
  };
  partnerIdColumn.setSortable(true);
  sortHandler.setComparator(partnerIdColumn, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
      return o1.compareTo(o2);
    }
  });

Edit: Add row:

public void addRow(String id){
    List<String> list = dataGridProvider.getList();
    list.add(id);

    dataGridProvider.setList(list);
    dataGrid.redraw();
 }

I've been following the sample code here http://gwt.googleusercontent.com/samples/Showcase/Showcase.html#!CwDataGrid and I don't know what I am missing. When I click the header nothing happens

1

1 Answers

0
votes

Here is the code with my DATA. Compare with your code.

    List<String> DATA = new ArrayList<String>();
    DATA.add("John");
    DATA.add("Mary");
    DATA.add("Zander");

    final ProvidesKey<String> KEY_PROVIDER = new ProvidesKey<String>() {
        @Override
        public Object getKey(String item) {
            return item;
        }
    };
    DataGrid<String> dataGrid = new DataGrid<String>(KEY_PROVIDER);
    Column<String, String> partnerIdColumn = new Column<String, String>(
            new TextCell()) {
        @Override
        public String getValue(String object) {
            return object;
        }
    };
    partnerIdColumn.setSortable(true);
    dataGrid.addColumn(partnerIdColumn, "Name");

    ListDataProvider<String> dataGridProvider = new ListDataProvider<String>();
    dataGridProvider.addDataDisplay(dataGrid);
    List<String> list = dataGridProvider.getList();
    for (String data : DATA) {
        list.add(data);
    }

    ListHandler<String> sortHandler = new ListHandler<String>(list);
    sortHandler.setComparator(partnerIdColumn, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return o1.compareTo(o2);
        }
    });
    dataGrid.addColumnSortHandler(sortHandler);
    //the data is sorted alphabetically by default.
    dataGrid.getColumnSortList().push(partnerIdColumn);