2011-08-18 220 views
1

在此输入代码我有一个celltable和列包含一些数字。我想在表格的最后添加一行,它将保存每列的总数。有没有办法做到这一点?gwt - celltable - 添加额外的行

以下是我的代码:

import java.util.*; 

import com.google.gwt.core.client.EntryPoint; 
import com.google.gwt.user.cellview.client.CellTable; 
import com.google.gwt.user.cellview.client.TextColumn; 
import com.google.gwt.user.client.ui.RootPanel; 
import com.google.gwt.view.client.ListDataProvider; 

public class TestProject implements EntryPoint 
{ 

private static int totalSalary=0; 
private static class Contact 
{ 
     private final String salary; 
     private final String name; 

     public Contact(String name, String salary) 
     { 
      this.name = name; 
      this.salary = salary; 
     } 
} 

private static List<Contact> CONTACTS = Arrays.asList(new Contact("John","100000"), 
                 new Contact("Mary", "200000"), 
                 new Contact("Zander", "300000")); 
/** 
* This is the entry point method. 
*/ 
public void onModuleLoad() 
{ 
    final CellTable<Contact> table = new CellTable<Contact>(); 

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

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

    // Add the columns. 
    table.addColumn(nameColumn, "Name"); 
    table.addColumn(addressColumn, "Salary"); 

    // Create a data provider. 
    ListDataProvider<Contact> dataProvider = new ListDataProvider<Contact>(); 

    // Connect the table to the data provider. 
    dataProvider.addDataDisplay(table); 

    // Add the data to the data provider, which automatically pushes it to the 
    // widget. 
    final List<Contact> list = dataProvider.getList(); 
    for (Contact contact : CONTACTS) { 
     list.add(contact); 
    } 

    // We know that the data is sorted alphabetically by default. 
    table.getColumnSortList().push(nameColumn); 

    Contact total = new Contact("Total: ",totalSalary+""); 
    list.add(total); 



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

}

+0

是你的单元格表连接到数据提供呃? – Chris

+0

@Chris,我发布了我的代码。提前致谢。 – sap

+0

你是什么意思总计虽然我发布回答 – Chris

回答

2

而且同样的效果,我建议你使用页脚,参数,当你添加列: addColumn(塔COL,头球冲顶)

1

当你的意思总计即时通讯不太清楚你的意思,但这个类同你的代码,但我已经添加了一个按钮,将添加一行你可以把它拿出来,然后加上这一行。

/** 
* Entry point classes define <code>onModuleLoad()</code>. 
*/ 
public class TestGwt implements EntryPoint { 

    private static class Contact { 
      private final String address; 
      private final String name; 

      public Contact(String name, String address) { 
       this.name = name; 
       this.address = address; 
      } 
      } 

    private static List<Contact> CONTACTS = Arrays.asList(new Contact("John", 
    "123 Fourth Road"), new Contact("Mary", "222 Lancer Lane"), new Contact(
    "Zander", "94 Road Street")); 
    /** 
    * This is the entry point method. 
    */ 
    public void onModuleLoad() { 
     // Create a CellTable. 
     final CellTable<Contact> table = new CellTable<Contact>(); 

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

     // Make the name column sortable. 
     nameColumn.setSortable(true); 

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

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

     // Create a data provider. 
     ListDataProvider<Contact> dataProvider = new ListDataProvider<Contact>(); 

     // Connect the table to the data provider. 
     dataProvider.addDataDisplay(table); 

     // Add the data to the data provider, which automatically pushes it to the 
     // widget. 
     final List<Contact> list = dataProvider.getList(); 
     for (Contact contact : CONTACTS) { 
      list.add(contact); 
     } 

     // We know that the data is sorted alphabetically by default. 
     table.getColumnSortList().push(nameColumn); 

     Button add = new Button("Add Row"); 
     add.addClickHandler(new ClickHandler() { 

      @Override 
      public void onClick(ClickEvent event) { 
       list.add(new Contact(Integer.toString(table.getRowCount()),Integer.toString(table.getRowCount()))); 
      } 
     }); 


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

     } 



} 

希望这将有助于我不知道你所说的总的意思,虽然什么都可以添加到最终场在接触的幌子,即使它neccessarily心不是一个更好的办法是使用泛型数据提供程序,但这将实现用最少的代码

0
public void addNewRow(){     

    List<Contact> newContactLst = Arrays.asList(new Contact("TEST", 
       "Sample")); 

    int numRows = table.getRowCount(); 

    table.setRowCount(numRows+1); 

    table.setRowData(numRows,newContactLst); 

} 
+0

如果你解释代码,这将是一个更强的答案。不要只是把鱼放在鱼上,教他(和其他人有相同的问题)去钓鱼。 –