行の一部のセルを編集不可能にする必要があります。 これまでに私の解決策は、私が列を作成するとき、私がTextCellを作成し、そうでなければEditTextCell、DatePickerCellなどのデフォルトのCellと一緒に行く、readOnlyの場合です。GWT CellTableセル読み取り専用/無効/編集不可能
この問題は、私がreadOnlyなどのいくつかの行を作成できないことです。または、それらはすべてreadOnlyのフィールドか、そうでないフィールドです。 |
のData1:
にはどうすればいいの例
TABLEのためにこれを作るために行うことができますデータ2 |データ3
--------------------------------------
readOnly |非readOnly | readOnly
readOnly | readOnly |私は「読み取り専用」を意味するとき非読み取り専用
それは私が決してトリガーすでに私のcutom細胞を作成し、TextImputCellを交換しようとしたが、メソッド「有効」またはそれは「TextCell」
celda = new TextInputCell();
Column<ObjetoDato, String> columna = new Column<ObjetoDato, String>(celda) {
@Override
public String getValue(ObjetoDato object) {
if(actual.getValorDefault()!=null && object.getValor(actual.getNombreCampo()).isEmpty()){
object.setValor(actual.getNombreCampo(), actual.getValorDefault());
return actual.getValorDefault();
}
return object.getValor(actual.getNombreCampo());
}
};
tabla.agregarColumna(columna, actual.getCaption());
columna.setFieldUpdater(new FieldUpdater<ObjetoDato, String>() {
@Override
public void update(int index, ObjetoDato object, String value) {
object.setValor(actual.getNombreCampo(), value);
new Scripter(object,actual.getComportamiento(),true);
tabla.actualizar();
Sistema.get().getIG().actualizarTotales();
}
});
作ることができます
celda = new FabriCel();
と
public class FabriCel extends TextInputCell {
private String campo;
public FabriCel(String campo){
this.campo=campo;
}
@Override
public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater){
Boolean editable = false;///get it from your model
if(editable != null && !editable){
event.preventDefault();
}else{
super.onBrowserEvent(context, parent, value, event, valueUpdater);
}
}
また、この
@Override
public void render(com.google.gwt.cell.client.Cell.Context context, String value, SafeHtmlBuilder sb) {
Boolean editable = false;///get it from your model
if(editable){
Log.log();
sb.appendHtmlConstant("<div contentEditable='false'>" +value+"</div>");
}else{
Log.log("No entra");
super.render(context, value, sb);
}
}
ありがとう!
。 'EditTextCell'の直接インスタンスを置く代わりに、独自のcell.canを追加する必要があります。 – iMBMT
私はいくつかのコードを追加し、レンダリングしません。 – fguespe
もし私が間違っていないなら、私はあなたの要件がそれに一致するコードを投稿します。なぜあなたは 'EditTextCell'の代わりに' TextInputCell'を使っていますか?私は理解していない。いつあなたは 'onBrowserEvent' /' render'を呼びたいのですか?デバッグモードで実行し、デバッグポイントでチェック!! – iMBMT