代码之家  ›  专栏  ›  技术社区  ›  Dan Hargis

瓦丁8网格不再具有网格。addRow(obj)

  •  2
  • Dan Hargis  · 技术社区  · 8 年前

    我最近收到了一个Vaadin 7项目,之前的开发人员使用了Vaadin 7Grid。addRow(obj)将行添加到网格。现在在瓦丁8号网格中,添加了网格。集合项目(?集合?)这会完全清除网格上网格中的数据。setItems()。我看了所有来自Vaadin的YouTube视频和所有堆栈溢出页面,没有找到答案。

    https://vaadin.com/forum#!/thread/15724440

    这是我的作品,我并不为此感到骄傲。基本上,作为我的示例,添加一个ArrayList使用一个名为firstName、lastName、email和salary的Person类。

    @SpringUI(path = "/person")
    @Theme("valo")
    public class PersonForm extends UI{
    
        @Autowired
        PersonService personService;
        List<Person> entries = new ArrayList<Person>();
        private TextField firstName = new TextField("First Name");
        private TextField lastName = new TextField("Last Name");
        private TextField email  = new TextField("Email Address");
        private TextField salary  = new TextField("Salary");
        private Person person = new Person();
        private Grid<Person> grid = new Grid<>(Person.class);
        final private FormLayout layout = new FormLayout();
    
        @Override
        protected void init(VaadinRequest request){
    
            grid.getEditor().isEnabled();
            grid.setColumnOrder("firstName", "lastName",
                    "email", "salary");
    
            layout.addComponent(firstName);
            layout.addComponent(lastName);
            layout.addComponent(email);
            Button save = new Button("Save", e-> {
    
                addPersonToGrid(new Person(firstName.getValue(), lastName.getValue(), email.getValue(),salary.getValue()));
    
                Notification.show("PERSON WAS SAVED");
            });
    
            layout.addComponent(save);
            layout.addComponent(grid);
            layout.setMargin(true);
            setContent(layout);
    
        }
    
        public void addPersonToGrid(Person person){
            entries.add(person);
            grid.setItems(entries);
        }
    }
    
    1 回复  |  直到 8 年前
        1
  •  5
  •   Manuel Kollegger    8 年前

    您是正确的,在Vaadin8中不再有addRow/addBean方法。

    使用这样的数据提供者会更容易:

    private ListDataProvider<Person> provider = ListDataProvider.ofCollection(entries);
    
    @Override
    protected void init(VaadinRequest request){
      grid.setDataProvider(provider);
      ........
    }
    
    public void addPersonToGrid(Person person){
        entries.add(person);
        provider.refreshAll();
    }
    
    public void editPersonToGrid(int idx, Person person){
        entries.set(idx, person);
        provider.refreshItem(person);
    }
    

    这并不像仅仅调用条目那么简单。添加(person)和其他自动处理的内容,但它适用于大型数据集,如果使用过滤器和排序,则非常方便。