2

dojox データ グリッドで選択セルの編集を無効または有効にする方法

データ グリッドに 2 つの列 (A、B) があるとします。列 A の値に基づいて B の列の値を編集できるようにします。DOJO バージョンに固有のスタック オーバーフローの解決策を 1 つ確認しました。上記の目的を達成できる API があるかどうかを知りたいです。

4

2 に答える 2

3

私の好みの方法は、

canEdit: function(inCell, inRowIndex)

DataGridのメソッド。それから、あなたはアイテムを得ることができます:

this.getItem(inRowIndex)

次に、編集可能かどうかを判断し、true/falseを返します。

ただし、これは列の編集可能なフラグを上書きするため、必要に応じてそれを使用して何かを行う必要があります。

于 2012-11-05T22:29:59.693 に答える
0

そのような 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 を追加して、修正を試みることができます。

于 2012-10-03T04:00:41.423 に答える