Tôi muốn làm cho một số ô của các hàng có thể không chỉnh sửa được. bây giờ giải pháp của tôi là khi tôi tạo ra các cột, nếu một là readOnly, y làm cho một TextCell, nếu không, tôi đi với Cell mặc định có thể được EditTextCell, DatePickerCell, vv.Tế bào GWT CellTable chỉ đọc/tắt/không thể chỉnh sửa
Vấn đề với điều này là tôi không thể làm cho một số hàng readOnly và những người khác thì không. Hoặc họ là tất cả các lĩnh vực readOnly hoặc họ không.
Làm thế nào tôi có thể làm để làm cho điều này ví dụ
TABLE:
Data1 | Dữ liệu 2 | Dữ liệu3
--------------------------------------
readOnly | không chỉ đọc | readOnly
readOnly | readOnly | phi readonly
khi tôi có nghĩa là "chỉ đọc" nó có thể được "enabled" hoặc làm cho nó một "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();
}
});
tôi cố gắng tạo ra tế bào cutom tôi đã và thay thế TextImputCell, nhưng các phương pháp không bao giờ kích hoạt
celda = new FabriCel();
và
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);
}
}
Ngoài này
@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);
}
}
Cảm ơn!
Như tôi đã trả lời, bạn phải tạo ô tùy chỉnh . và thay vì đặt trường hợp trực tiếp của 'EditTextCell', bạn phải thêm custom cell.can bạn đặt một số mã? – iMBMT
Tôi đã thêm một số mã, hiển thị không bao giờ kích hoạt. – fguespe
Nếu tôi không sai khi tôi đăng mã yêu cầu của bạn phù hợp với nó. tại sao bạn sử dụng 'TextInputCell' thay vì' EditTextCell'?cái đó? Tôi không hiểu. khi nào bạn muốn gọi 'onBrowserEvent' /' render'? chạy trong chế độ gỡ lỗi và kiểm tra với điểm gỡ lỗi !! – iMBMT