2017-01-16 76 views
0

我想通過點擊添加按鈕來添加新添加的表格項目(又名行)。我的主要目的是讓它既可選擇也可編輯(但只有該行,現在是整個表)。Vaadin - 添加項目可選(並可編輯)

下面是表代碼:

  public Table createTable(BeanContainer<Long, PS_SECTION> beans) {  
      table.setImmediate(true); 
      table.setContainerDataSource(beans); 
      table.setColumnHeader("PS_SECTION", "ID"); 
      table.setColumnHeader("NAME", "SECTION"); 
      table.setColumnHeader("VORDER","ORDER"); 

      table.addGeneratedColumn("ACTIVE", new Table.ColumnGenerator() { 

       @Override 
       public Object generateCell(final Table source, final Object itemId, 
         Object columnId) {    

      table.setTableFieldFactory(new DefaultFieldFactory() { 

       @Override 
       public Field<?> createField(Container container, final Object itemId, Object propertyId, Component uiContext) { 

         if (!itemId.equals(table.getValue())) { 
           return null; 
         } 
           Field<?> field = super.createField(container, itemId, propertyId, uiContext); 
           field.setBuffered(true); 

        return field; 
       } 
      }); 


      table.addValueChangeListener(new Property.ValueChangeListener() {   
       @Override 
       public void valueChange(Property.ValueChangeEvent event) {    
         if (table.getValue() != null) {      
          editButton.setVisible(true); 
         } 
         else { 
          editButton.setVisible(false); 
         }   
       } 
      }); 

      table.addItemClickListener(new ItemClickEvent.ItemClickListener() { 
        @Override 
        public void itemClick(ItemClickEvent itemClickEvent) { 
         if (itemClickEvent.isDoubleClick() && !table.isEditable()) { 
          table.setValue(itemClickEvent.getItemId()); 
          configureEditable(true); 
         // THE FUNCTION THAT MAKES THE SELECTED ROW EDITABLE 
          editButton.setVisible(false); 
          addButton.setVisible(false); 
         }    
        } 
       }); 


     // ....SOME MORE TABLE ATTRIBUTES HERE.... 

      return table; 
     } 

上面的代碼工作正常,選定行,但我怎樣才能使新添加的行直接選擇和編輯?

addButton.addClickListener(new ClickListener() {    
     @Override 
      public void buttonClick(ClickEvent event) {          
       addList(); //HERE THE ROW (AND THE BEAN) IS ADDED     

      /** 
      * What to put here? 
      * 
      */ 
       configureEditable(true); 

      } 
    }); 

回答

1

Object itemId = createNewBean(); //創建一個新的bean,它返回一個唯一的ID可以被設置爲新項目的ID。

table.addItem(itemId); //add this newly created item to the table 
//set the column values here for this particular item 
table.getItem(itemId).getProperty("column_name").setValue("column_value"); 
//similarly set values of other columns for this particular item 

table.setValue(itemId); //this selects the just added row 

我希望它有幫助。

+0

謝謝!它沒有成功,但它是一個好主意 – natso

+0

實際上,它確實在新項目中設置了一個唯一的ID,但它沒有使其可選。 – natso