我现在在一个DataGrid中,给备注
设为可编辑单元格,有没有办法让多行的备注都处于编辑状态?
好的,我再试试
我现在改了一种实现方式,是将这两列都用组件渲染,我现在想,当问题确认这一列中 选择问题项
的时候,备注里面的textField
变成必填,但是选择正常项
的时候,又是非必填的,请问这可以实现吗?
下面是我这两列的渲染器代码:
@Supply(to = "fplDataGrid.issueConfirm", subject = "renderer")
private Renderer<ReviewIssues> fplDataGridIssueConfirmRenderer() {
return new ComponentRenderer<>(
() -> {
JmixRadioButtonGroup<String> jmixRadioButtonGroup = uiComponents.create(JmixRadioButtonGroup.class);
jmixRadioButtonGroup.setItems("正常项", "问题项");
jmixRadioButtonGroup.setWidth("135px");
jmixRadioButtonGroup.setThemeName("Horizontal");
return jmixRadioButtonGroup;
},
(jmixRadioButtonGroup, reviewIssues) -> {
Boolean issueConfirm = reviewIssues.getIssueConfirm();
if (issueConfirm != null) {
if (issueConfirm) {
jmixRadioButtonGroup.setValue("正常项");
} else {
jmixRadioButtonGroup.setValue("问题项");
}
}
jmixRadioButtonGroup.addValueChangeListener(e -> {
if (jmixRadioButtonGroup.getValue().equals("正常项")) {
reviewIssues.setIssueConfirm(true);
} else {
reviewIssues.setIssueConfirm(false);
}
dataManager.save(reviewIssues);
fplDl.load();
});
}
);
}
@Supply(to = "fplDataGrid.remark", subject = "renderer")
private Renderer<ReviewIssues> fplDataGridRemarkRenderer() {
return new ComponentRenderer<>(reviewIssues -> {
TypedTextField<String> typedTextField1 = uiComponents.create(TypedTextField.class);
typedTextField1.setWidth("100%");
String remark = reviewIssues.getRemark();
typedTextField1.setValue(remark == null ? "" : remark);
typedTextField1.addValueChangeListener(e -> {
reviewIssues.setRemark(typedTextField1.getValue());
dataManager.save(reviewIssues);
fplDl.load();
});
return typedTextField1;
});
}
有一个思路:
- 在控制器中声明一个类变量
Map<UUID,TextField>
保存实体 id和 remark TextField的映射关系。 - 在remark的renderer中,把生成的 textField 保存在上面的map中。这里的textField可能需要添加NotEmpty 的 validator
- 在radioButtonGroup的事件中,如果满足条件,根据当前行的数据id,从 map 中获取 TextField并设置 required=true。
1 个赞
好的 我试一下,我现在又改成您说的非缓存的行内编辑了,等我测试效果不好的话,我在换成这个Map
的形式