Отключить или включить редактирование для выбранной ячейки в сетке данных dojox

Как отключить или включить редактирование для выборочной ячейки в сетке данных dojox, т.е.

Представьте, что у меня есть два столбца (A, B) в сетке данных. Я хочу, чтобы значение столбца B можно было редактировать на основе значения столбца A. Я видел одно решение в переполнении стека, которое было характерно для версии DOJO. Я хотел бы знать, есть ли API-интерфейсы, с помощью которых мы можем достичь вышеуказанной цели.


person prasad katankot    schedule 02.10.2012    source источник


Ответы (2)


Мой предпочтительный метод - переопределить

canEdit: function(inCell, inRowIndex)

метод DataGrid. Отсюда вы можете получить предмет:

this.getItem(inRowIndex)

затем определите, должно ли оно быть редактируемым или нет, и верните true/false.

Однако это переопределяет редактируемый флаг в столбце, поэтому вам нужно будет что-то сделать с этим, если это необходимо.

person Ed Jellard    schedule 05.11.2012

API как такового нет. Недавно у меня также было подобное требование, и вот как я его реализовал:

1) Изначально столбец B доступен для редактирования, потому что я сделал это в разделе «Поля» сетки. 2) Используйте onRowClick для захвата рендеринга строк. Что-то вроде этого должно делать

dojo.connect(grid, "onRowClick", grid, function(evt){
  var idx = evt.rowIndex,
  item = this.getItem(idx);

  //  get a value out of the item
  msname = this.store.getValue(item, "msname");
  if(msname != null &U& (trim(msname) == trim(offsetName))) {
    dojox.grid.cells._Base.prototype.format(idx, item);
  }
});

Затем следующий метод запрещает встроенное редактирование требуемого столбца. Мы передаем индекс строки и индекс столбца этой следующей функции:

dojox.grid.cells._Base.prototype.format = function(inRowIndex, inItem){
    var f, i=grid.edit.info, d=this.get ? this.get(inRowIndex, inItem) : (this.value || this.defaultValue);
    d = (d && d.replace && grid.escapeHTMLInData) ? d.replace(/&/g, '&amp;').replace(/</g, '&lt;') : d;

                //Check inRowIndex and inItem to determine whether to be editable for this row here.

    if(this.editable && (this.alwaysEditing || (i.rowIndex==inRowIndex && i.cell==this))){
    return this.formatEditing(d, inRowIndex);
    }else{
    return this._defaultFormat(d, [d, inRowIndex, this]);
    }
}

Надеюсь, это поможет. Возможно, вы можете добавить jsfiddle, и мы можем попытаться это исправить.

person Piyush-Ask Any Difference    schedule 03.10.2012
comment
Я попробую и сообщу вам о результатах. спасибо за вашу быструю помощь. - person prasad katankot; 04.10.2012
comment
Можете ли вы объяснить, что делает функция dojox.grid.cells._Base.prototype.format? Что это в таком контексте? - person Mat0; 07.11.2017