5

行の一部のセルを編集不可にできるようにしたい。今のところ私の解決策は、列を作成するときです.1つがreadOnlyの場合はTextCellを作成し、そうでない場合はEditTextCell、DatePickerCellなどのデフォルトのCellを使用します.

これに関する問題は、一部の行を読み取り専用にできず、他の行を読み取り専用にできないことです。または、すべてのフィールドが読み取り専用であるか、そうではありません。

たとえば、これを作成するにはどうすればよいですか

表:
データ 1 | データ2 | Data3
--------------------------------------
読み取り専用 | 非読み取り専用 | 読み取り専用 読み取り
専用 | 読み取り専用 | 非読み取り専用

「readOnly」を意味する場合は、「有効」にするか、「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();
                              }
                    });  

すでにカスタムセルを作成して TextImputCell を置き換えようとしましたが、メソッドがトリガーされません

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);
    }

}  

ありがとう!

4

3 に答える 3

1

これを行う方法は、編集可能セルの onBrowserEvent イベントをオーバーライドし、セルが編集可能でない場合にイベントを消費することです。

            final EditTextCell cell = new EditTextCell(renderer)
            {
                @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);
                    }
                }
}
于 2013-05-30T06:35:03.467 に答える