【问题标题】:Vaadin Flow grid add an empty rowVaadin Flow 网格添加一个空行
【发布时间】:2021-07-28 16:32:43
【问题描述】:

如何以编程方式添加新的空行(可能在网格的底部或顶部)。 在稍后的状态下,用户输入数据,或者在某些操作之后将所有行保存在数据库中。

【问题讨论】:

  • 模糊的问题。我看不出你的两个句子之间的联系。此外,反复使用“也许”是令人困惑的。请花更多精力在发布之前起草一个详细明确的问题。
  • 您可能想解释为什么您需要一个额外的空白行,因为可能有更好的方法来实现您的真正目标。
  • 我需要一个额外的可编辑行,以便用户可以在每个单元格中键入数据。添加多行后,用户可以保存在数据库中,但这会发生在后面。

标签: java vaadin vaadin-flow vaadin-grid


【解决方案1】:

从技术上讲,它应该相当简单,尤其是如果您将ListDataProvider 用于网格,这里是简化示例:

Grid<Bean> grid = new Grid<>(Bean.class);
ListDataProvider<Bean> dp = new ListDataProvider<>(getData());
grid.setDataProvider(dp);
add(grid);

Button button = new Button("Add row");
button.addClickListener(event -> {
    Bean bean = new Bean();
    dp.getItems().add(bean);
    dp.refreshAll();
    grid.getEditor().editItem(bean);       
});
add(button);

【讨论】:

    【解决方案2】:
    1. 您使用 ListDataProvider 设置了网格的数据提供者。

    2. Bean 对象重写 hashCode 方法。 例如:

      @瞬态 私有长 sId;

      公共构造方法(){ sId = System.currentTimeMillis(); }

      @覆盖 公共 int hashCode() { if (isNew()) return (int) (super.hashCode()+sId); 别的 返回 super.hashCode(); }

    3. 新建一个bean对象并添加到网格的ListDataProvider中

       BeanClass item = new BeanClass();
      (ListDataProvider<BeanClass>)grid.getDataProvider().getItems().add(item);
      (ListDataProvider<BeanClass>)grid.getDataProvider().refreshAll();
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-02
      • 2022-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多