2017-01-05 2 views
1

У меня есть таблица Vaadin, и я хочу, чтобы динамически добавлял строки.Динамическое добавление нескольких строк таблицы

Код, который я пробовал, работает нормально, и когда я нажимаю кнопку добавления строки, в таблице появляется новая строка. Проблема в том, что когда я нажимаю кнопку для второго, третьего и т. Д. Времени, в таблице не появляется новая строка. Я хотел бы добавить столько строк, сколько нажата кнопка. Как я могу прибить его?

Ниже приведен код, в котором создается таблица:

public Table createTable(BeanContainer beans) { 

    table.setContainerDataSource(beans); 
    table.setColumnHeader("PS_SECTION", "ID"); 
    table.setColumnHeader("NAME", "SECTION"); 
    table.setColumnHeader("VORDER","ORDER"); 

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

     private static final long serialVersionUID = 1L; 
     @Override 
     public Object generateCell(final Table source, final Object itemId, 
       Object columnId) { 

      final CheckBox checkBox = new CheckBox(""); 
      Set<Object> keys = itemIdToCheckbox.keySet(); 

       for (Object key : keys) {      
         PS_SECTION PS = (PS_SECTION) sectionMap.get(key); 

         if (PS.getISACTIVE() == 1) { 
          CheckIt(key,true);        
         } 
         else if(PS.getISACTIVE() == 0){ 
          CheckIt(key,false);       
         }        
       } 

      checkBox.addAttachListener(new AttachListener() { 
       @Override 
       public void attach(AttachEvent event) { 
        itemIdToCheckbox.put(itemId, checkBox); 
        tableToCheck.put(itemId, checkBox);               
       } 
      }); 

      checkBox.addDetachListener(new DetachListener() { 
       @Override 
       public void detach(DetachEvent event) { 
        itemIdToCheckbox.remove(itemId); 
        tableToCheck.remove(itemId); 
       } 
      }); 

      checkBox.addValueChangeListener(new Property.ValueChangeListener() {      
       @Override 
       public void valueChange(Property.ValueChangeEvent event) {      
        Boolean selected = (Boolean) event.getProperty().getValue();                   
       } 
      }); 

      return checkBox;     
     }    
    }); 

    table.setMultiSelect(false); 
    table.setVisibleColumns(new Object[]{"PS_SECTION", "NAME", "VORDER", "ACTIVE"}); 
    table.setEditable(true); 
    table.setSelectable(true); 
    table.setImmediate(true); 
    table.commit(); 
    return table; 
} 

А вот код контейнера:

public BeanContainer createContainer() {     
     beans.setBeanIdProperty("PS_SECTION"); 
     for (int i = 0; i < list.size(); i++) { 
      PS_SECTION section = list.get(i); 

       Long ps = section.getPS_SECTION(); 
       String na = section.getNAME(); 
       Long is = section.getISACTIVE(); 
       Long isg = section.getISGLOBAL(); 
       Long or = section.getVORDER(); 
       Integer st = section.getSTATUS(); 

      beanlist.add(new PS_SECTION(ps, na, is, isg, or, st));  
     }   
     beans.addAll(beanlist); 
    return beans; 
} 

Наконец, ряд Добавьте код кнопки:

addButton.addClickListener(new ClickListener() {    
     @Override 
     public void buttonClick(ClickEvent event) {          
       Object newbean = beans.addBean(new PS_SECTION(0L, null, 0L, 0L, 0L, 0)); 
       table.addItem(newbean); 
     } 
    }); 

Также попробовали следующее, чтобы избежать дублирования. То же самое произошло

    long in = 200; 
        Object newbean = beans.addBean(new PS_SECTION(in, null, 0L, 0L, 0L, 0));  
        ++in; 
        table.addItem(newbean); 
+0

Каков идентификатор newBean? Вероятно, у вас есть дубликаты ...) –

+0

@ AndréSchild Идентификатор является первым длинным от beans. Я отредактировал свой вопрос сейчас, согласно вашему комментарию. То же самое произошло. Как вы думаете, что мне делать? – natso

+0

Попробуйте вызвать table.refreshRowCache(); после того, как вы добавили свои товары. –

ответ

1

Держите эту строку: long in = 200; вне кода clicklistener кнопки добавить. Возможно, вы можете сделать его глобальным (класс) членом;

+0

Сохранение линии за пределами кнопки добавления наверняка помогло. Благодаря! – natso

Смежные вопросы