2016-06-16 2 views
2
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を使用しています。次のコードを使用すると、すべてのセルを編集可能に設定できます。データソースがSQLContainerのときに1つの列のみを編集可能にする方法

employeeTable.setEditable(true); 

しかし、私は1つの列を編集可能にしたいと考えています。アドレスは編集可能な唯一の列でなければならないとします。

答えて

2

カラムを編集可能にするためにこれを実際に使用していませんが、ColumnGeneratorというカスタムを使用して、編集不可能なテーブルにTextFieldを戻すことができます。 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に慣れていないよ、これは効果的に、DBへの変更をコミットすることはよく分かりません。

関連する問題