2016-05-13 2 views
0

RPCを使用してDBからデータを取り込んだセルテーブルから特定の列を並べ替える際に問題があります。基本的に私は姓の列をアルファベット順に並べ替えようとしています。表は完全に取り込まれますが、ソートは機能しません。gwt rpcからデータが移入されたセルテーブルの列を並べ替えることができません

なぜでしょうか?事前に

おかげ

// Create the family name column. 
    final TextColumn<ContactInfo> familyNameColumn = new TextColumn<ContactInfo>() { 

     @Override 
     public String getValue(ContactInfo object) { 
      return object.getFamilyName(); 
     } 
    }; 
    table.setColumnWidth(familyNameColumn, 20, Unit.PCT); 

    // Make the family name sortable 
    familyNameColumn.setSortable(true); 


// Add the columns 
    table.addColumn(familyNameColumn, UserMenuConstants.FAMILY_NAME_COLUMN); 
    table.addColumn(familyAdministratorColumn, UserMenuConstants.FAMILY_ADMINISTRATOR_COLUMN); 
    table.addColumn(apartmentNuberColumn, UserMenuConstants.FAMILY_APARTMENT_NUMBER_COLUMN); 
    table.addColumn(emailColumn, UserMenuConstants.EMAIL_ADDRESS_COLUMN); 
    table.addColumn(phoneNumberColumn, UserMenuConstants.PHONE_NUMBER_COLUMN); 

    DBGetContactInfoAsync rpcService = (DBGetContactInfoAsync) GWT.create(DBGetContactInfo.class); 
    ServiceDefTarget target = (ServiceDefTarget) rpcService; 
    String moduleRelativeURL = GWT.getModuleBaseURL() + "DBGetContactInfoImpl"; 
    target.setServiceEntryPoint(moduleRelativeURL); 

    rpcService.getContacts(new AsyncCallback<List<ContactInfo>>() { 

     @Override 
     public void onSuccess(List<ContactInfo> result) { 

      table.setRowCount(result.size()); 

      ListDataProvider<ContactInfo> dataProvider = new ListDataProvider<ContactInfo>(); 
      dataProvider.addDataDisplay(table); 

      List<ContactInfo> list = dataProvider.getList(); 
      for (ContactInfo contactInfo : result) { 
       list.add(contactInfo); 
      } 

      ListHandler<ContactInfo> listHandler = new ListHandler<ContactInfo>(result); 

      listHandler.setComparator(familyNameColumn, new Comparator<ContactInfo>() { 

       @Override 
       public int compare(ContactInfo o1, ContactInfo o2) { 
        return o1.getFamilyName().compareTo(o2.getFamilyName()); 
       } 
      }); 

      table.addColumnSortHandler(listHandler); 

     } 

     @Override 
     public void onFailure(Throwable caught) { 
      ... 
     } 
    }); 

答えて

0

はあなたのデータの2つのコピーを作っています。

List<ContactInfo> list = dataProvider.getList(); 

をしてlistListenerresultに接続されています:listdataProviderに接続されている

ListHandler<ContactInfo> listHandler = new ListHandler<ContactInfo>(result); 

はあなたがlistを表示するが、resultをソートしています。

だけ

new ListHandler<ContactInfo>(list); 

new ListHandler<ContactInfo>(result); 

を交換し、それが動作します。

EDIT:あなたはそれをさらに容易にし、ListDataProviderコンストラクタにresultを渡すことができ

new ListDataProvider<ContactInfo>(result); 

を次に、あなたはlistに値をコピーする必要はありません、ただやります

new ListHandler<ContactInfo>(dataProvider.getList()); 
0

そこのうち、あなたのするonSuccess方法で移動したコードのほとんどを - データがロードされるたびにそれを呼び出すする理由はありません。たとえば、/など、一度だけコンパレータを設定する必要がありますすることができ

並べ替えに使用する列のあなたのテーブルに教える:

table.getColumnSortList().push(familyNameColumn); 

新しいデータをロードが終了したら、それをソートするために、あなたのテーブルに教えます: resultlist

ColumnSortEvent.fire(table, table.getColumnSortList()); 
関連する問題