我想根据单元格的值更改Vaadin网格行的颜色.我尝试了如下,但没有奏效.
SCSS
@import "mytheme.scss";
@import "addons.scss";
// This file prefixes all rules with the theme name to avoid causing conflicts with other themes.
// The actual styles should be defined in mytheme.scss
.mytheme {
     @include addons;
     @include mytheme;
     .v-grid-row.error_row {
            // Tried following elements and didn't work.
            // background-color: red !important;
            // color: blue !important; // This changed the color of the font.
            background: green !important;
     }
}
Java代码
grid.setStyleGenerator(t -> {
            if (t.getLogLevel().trim().equals(ERROR) || t.getLogLevel().trim().equals(WARN)) {
                return "error_row";
            } …我使用数据库中的数据创建简单网格:
BeanItemContainer<Customer> container = new BeanItemContainer<>(Customer.class, customerRepository.findAll());
Grid grid = new Grid(container);
要编辑按钮的每一行:
Button edit = new Button("Edit", clickEvent -> openWindow((Customer) grid.getSelectedRows().iterator().next()));
这个打开的新窗口带有编辑表单.接受所有更改后,我必须手动刷新整个页面以查看Grid上的修改.我的问题是:
如何在修改任何行条目后仅刷新网格?如何将这些修改保存到数据库(也许beanItemContainer可以做到)?
我正在使用带聚合物2.x的vaadin-grid-filter,我遇到了以下问题.我有一个vaadin-grid-column如下,
<vaadin-grid-column width="15em">
        <template class="header">
            <vaadin-grid-filter aria-label="Inventory" path="" value="[[_filterItems]]">
                <vaadin-text-field slot="filter" placeholder="Item" value="{{_filterItems}}" focus-target></vaadin-text-field>   
            </vaadin-grid-filter>
        </template>
    <template>[[item]]</template>
</vaadin-grid-column>
[[item]]是一个字符串数组,当path设置为空字符串时,过滤不起作用.如果我将每个字符串放在一个Json对象中并像在文档中那样访问它,那么它可以正常工作.但我想知道是否有一种方法可以过滤掉它.
先感谢您.
Vaadin Grid允许定义为可编辑
grid.setEditorEnabled(true);
这使得所有可见列都可以编辑.但是,我不希望用户编辑特定列,但似乎可编辑是全部或全部.
我发现的下一个最佳解决方案是使用禁用的编辑器定义编辑器字段,这几乎可以解决问题,但用户仍然可以选择文本并移动光标(但该字段不再可编辑).
Grid.Column nameColumn = grid.getColumn("fullName");
nameColumn.setHeaderCaption("Full Name");
nameColumn.setEditorField(getNoEditableTextField());
...
private Field<?> getNoEditableTextField() {
    TextField noEditableTextFiled = new TextField();
    noEditableTextFiled.setEnabled(false);
    return noEditableTextFiled;
}
我相信Label不能用,因为它不是Field.
有没有更好的选择来实现这一目标?
编辑:正如aakath所说,有一种方法可以实现这一点,不能编辑列,但这样做时,单元格值会在编辑行时消失,这是不可取的.
在我之前的项目中,我使用了BeanItemContainer和一个带GeneratedColumns的表来显示一个显示搜索结果的自定义组件,比如google.标题,日期,内容以垂直方式.虽然它很糟糕(表),但它确实奏效了.
现在我想将Grid组件用于新项目,目标相同.该列将生成并包含自定义组件.
这可以与Grid一起使用吗?是否有更好的东西,如列表或转发器组件可用?具有自定义组件的单个列的任何示例?
看起来Vaadin对简单数据或Button渲染器以外的任何东西都不屑一顾.
更新
看起来添加组件不适用于Grid 7.5+
此外,网格单元格只能固定高度
ComponentRederer 附加组件支持单元组件,但修复高度仍然是个问题.
示例代码:
 public class Result {
      String title;
      Date date;
      URL url;
      String description;
      List<String> tags;
      public Result (){}
 }
BeanItemContainer<Result> resultContainer = fetchResults(searchTerm);
我也使用Lazy Container,简单地使用beanitem.
然后我有一个RecordResultComponent,它在以下布局中构造单个记录结果的布局:
 Title(link with Url)
 Date
 Description
 tag1 tag2 tag3 ...
使用vaadin(7.7.3)我按名称过滤网格,这个过滤需要几秒钟才能从Gridgui中删除对象.所以,如果我点击该游戏中时光倒流的一行Grid将从中移除Container,则会引发异常:
Caused by: java.lang.IllegalArgumentException: Given item id (5422bef6-e472-4d3e-af54-316c52d373da) does not exist in the container
at com.vaadin.ui.Grid$AbstractSelectionModel.checkItemIdExists(Grid.java:1371)
at com.vaadin.ui.Grid$SingleSelectionModel.select(Grid.java:1460)
at com.vaadin.ui.Grid$SingleSelectionModel$1.select(Grid.java:1445)
我想这是正常的,因为它从中移除了对象Container,然后它将传播到gui.
我曾想过checkItemIdExists()在我的Grid类中捕获异常覆盖该方法,但它会捕获每种情况的异常,这不是我正在寻找的行为.
我的问题是:如何在这种情况下捕获此异常?
看起来像Vaadin 8中不存在GeneratedPropertyContainer.
我们如何将生成的列添加到Vaadin 8 Grid?如果你能提供一个例子我很感激.
如何将行索引列添加到网格中,该列不会按照用户对行进行排序?
该解决方案不得包括对任何聚合物模板的更改,而应在 java 中完成。
vaadin-grid ×10
vaadin ×8
java ×5
vaadin7 ×5
vaadin8 ×2
datagrid ×1
polymer-2.x ×1
sass ×1
vaadin-flow ×1
vaadin14 ×1