2017-10-11 7 views
0

上のグリッドコンテナを更新する私は私がVaadin-できないコンボボックスの値の変化

grid.addColumn("columnProperty").setEditorField(combobox); 

として列 のいずれかで編集項目としてコンボボックスを有するグリッドでvaadin 7.7.7

を使用していコンボボックス選択の変更に基づいて同じ行のプロパティ/セルを更新する必要があります

私の問題は、コンボボックスがクリックされて選択値が変更されたときに1回、選択変更イベントが2回トリガされることです。しかし、次のセルの更新された値は初めて初めてUIに反映されます。 以下は作成されたコードです。どんな解決策ですか?

Combobox.addValueChangeListener(new ValueChangeListener() 
@Override 
public void valueChange(ValueChangeEvent event) { 

// below line works only first time when the combobox is clicked,but i want 
//it when the item in the combobox is changed 

gridContainer.getContainerProperty(editedRow,"editedColumProperty").setValue("ValueTobeUpdated");} 
    }); 

(保存前)、編集されたモードでコンボボックス変更上の単位列を更新する

が必要ですが、画像

example image

答えて

0

するためのリンクの下に参照してくださいあなたも、とき値変更イベントを取得しますフィールドは、ユーザーに表示する必要がある値を取得します。ユーザーが入力を受け入れたことを示すイベントを取得するには、フィールドグループ(setEditorFieldGroup)を使用する必要があります。 Vaadin example for grid editingのブックから

grid.getColumn("name").setEditorField(nameEditor); 

FieldGroup fieldGroup = new FieldGroup(); 
grid.setEditorFieldGroup(fieldGroup); 
fieldGroup.addCommitHandler(new CommitHandler() { 
    private static final long serialVersionUID = -8378742499490422335L; 

    @Override 
    public void preCommit(CommitEvent commitEvent) 
      throws CommitException { 
    } 

    @Override 
    public void postCommit(CommitEvent commitEvent) 
      throws CommitException { 
     Notification.show("Saved successfully"); 
    } 
}); 

編集

私はあなたがパラメータと単位コンボボックスを接続することを前提としています。私はこの種のバリューチェンジリスターでこれをやります。

BeanItemContainer container = new BeanItemContainer<>(
     Measurement.class, 
     measurements); 
Grid grid = new Grid(container); 
grid.setEditorEnabled(true); 
ComboBox parameterComboBox = new ComboBox(); 
ComboBox unitComboBox = new ComboBox(); 
parameterComboBox.addItems(Parameter.Pressure, Parameter.Temperature, Parameter.Time); 
parameterComboBox.addValueChangeListener(v -> setUnits(parameterComboBox, unitComboBox)); 
grid.getColumn("parameter").setEditorField(parameterComboBox); 
grid.getColumn("unit").setEditorField(unitComboBox); 

単位はこのように更新することができます。私はあなたが現在の価値を保持し、コンボボックス内の利用可能なアイテムを置き換える場合はそれを元に戻す必要があると思います。

private void setUnits(ComboBox parameterComboBox, ComboBox unitComboBox) { 
    Object currentValue = unitComboBox.getValue(); 
    List<String> units = unitsForParameter(parameterComboBox.getValue()); 
    unitComboBox.removeAllItems(); 
    unitComboBox.addItems(units); 
    if (units.contains(currentValue)) { 
     unitComboBox.setValue(currentValue); 
    } else { 
     unitComboBox.setValue(null); 
    } 
} 

private List<String> unitsForParameter(Object value) { 
    if (value == null) { 
     return Collections.emptyList(); 
    } else if (value == Parameter.Pressure) { 
     return asList("Pascal", "Bar"); 
    } else if (value == Parameter.Temperature) { 
     return asList("Celcius", "Kelvin"); 
    } else if (value == Parameter.Time) { 
     return asList("Second", "Minute"); 
    } else { 
     throw new IllegalArgumentException("Unhandled value: " + value); 
    } 
} 
+0

ただし、保存時にaddComitHandlerが発生します。保存する前に(編集モードで)コンボボックスの変更値に基づいて他のセルを更新する必要があります。質問の画像を参照してください。 – Nilambari

+0

ありがとう..これは私を助けた:) – Nilambari

関連する問題