Désactiver ou activer la modification pour la cellule sélective dans la grille de données dojox
-
12-12-2019 - |
Question
Comment désactiver ou activer la modification d'une cellule sélective dans la grille de données dojox, c'est-à-dire
Imaginez que j'ai deux colonnes (A, B) dans une grille de données.Je souhaite que la valeur de la colonne B soit modifiable en fonction de la valeur de la colonne A.J'ai vu une solution de débordement de pile qui était spécifique à une version DOJO.Je voudrais savoir s'il existe des API grâce auxquelles nous pouvons atteindre l'objectif ci-dessus.
La solution
Ma méthode préférée consiste à remplacer le
canEdit: function(inCell, inRowIndex)
méthode du DataGrid.A partir de là, vous pouvez obtenir l'objet :
this.getItem(inRowIndex)
puis déterminez s'il doit être modifiable ou non, et renvoyez vrai/faux.
Cependant, cela remplace l'indicateur modifiable sur la colonne, vous devrez donc faire quelque chose avec cela si nécessaire.
Autres conseils
Il n'y a pas d'API comme tel.J'ai également eu des exigences similaires récemment et voici comment je l'ai mis en œuvre:
1) Initialement, la colonne B est modifiable parce que je l'ai dit dans la section des champs de la grille 2) Utilisez ONROWCLICK pour capturer le rendu des rangées.Quelque chose comme ça devrait faire
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);
}
});
La méthode suivante désactive ensuite l'édition en ligne de la colonne requise.Nous passons l'indice d'index de ligne et de colonne à cette fonction suivante:
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, '&').replace(/</g, '<') : 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]);
}
}
espère que cela aide.Vous pouvez probablement ajouter un jsfiddle et nous pouvons essayer de le résoudre.