当数据源是 SQLContainer 时如何使只有一列可编辑
How to make only one column editable when the datasource is a SQLContainer
TableQuery tq1 = new TableQuery("employee", connectionPool);
tq1.setVersionColumn("VERSION");
employeeContainer = new SQLContainer(tq1);
employeeTable = new Table();
employeeTable.setContainerDataSource(employeeContainer);
employeeTable.setVisibleColumns(new Object[]{
"firstname", "lastname", "address"});
employeeTable.setSelectable(true);
employeeTable.setImmediate(true);
在那个例子中,我使用的是来自 Vaadin 的 SQLContainer-Addon。通过使用以下代码,我可以将所有单元格设置为可编辑。
employeeTable.setEditable(true);
但我只想让一栏可编辑。假设地址应该是唯一可以编辑的列。
还没有真正使用它来制作列 editable,但我猜你可以在其他 unedi 中使用自定义 ColumnGenerator
到 return TextField
s table table。如果您 link TextField 的模型到底层容器,您甚至可以让它们在两个方向上相互更新。 (以下代码未经测试)
myTable.addGeneratedColumn("address", new Table.ColumnGenerator() {
public Component generateCell(Table table, Object itemId, Object columnId) {
BeanItem<MyBean> item = myContainer.getItem(itemId);
Property<String> address = item.getItemProperty("address");
TextField tf = new TextField();
tf.setPropertyDataSource(address);
return tf;
}
}
注意:虽然这可能会更新容器模型,但我不确定这是否会有效地将更改提交到数据库,因为我不熟悉 SQLContainer。
TableQuery tq1 = new TableQuery("employee", connectionPool);
tq1.setVersionColumn("VERSION");
employeeContainer = new SQLContainer(tq1);
employeeTable = new Table();
employeeTable.setContainerDataSource(employeeContainer);
employeeTable.setVisibleColumns(new Object[]{
"firstname", "lastname", "address"});
employeeTable.setSelectable(true);
employeeTable.setImmediate(true);
在那个例子中,我使用的是来自 Vaadin 的 SQLContainer-Addon。通过使用以下代码,我可以将所有单元格设置为可编辑。
employeeTable.setEditable(true);
但我只想让一栏可编辑。假设地址应该是唯一可以编辑的列。
还没有真正使用它来制作列 editable,但我猜你可以在其他 unedi 中使用自定义 ColumnGenerator
到 return TextField
s table table。如果您 link TextField 的模型到底层容器,您甚至可以让它们在两个方向上相互更新。 (以下代码未经测试)
myTable.addGeneratedColumn("address", new Table.ColumnGenerator() {
public Component generateCell(Table table, Object itemId, Object columnId) {
BeanItem<MyBean> item = myContainer.getItem(itemId);
Property<String> address = item.getItemProperty("address");
TextField tf = new TextField();
tf.setPropertyDataSource(address);
return tf;
}
}
注意:虽然这可能会更新容器模型,但我不确定这是否会有效地将更改提交到数据库,因为我不熟悉 SQLContainer。