2010-05-19 5 views

Répondre

7

Je vous recommande d'utiliser ce que l'on appelle "Inline Editing" pour l'édition de lignes. Le plus d'avantage de cette méthode, qu'elle est très intuitive et l'utilisateur. Vous pouvez voir comment cela fonctionne sur la page de démonstration http://trirand.com/blog/jqgrid/jqgrid.html. Choisissez sur cette démo "Row Editing" puis "Using Events" ou "Types d'entrée" sur la partie de l'arbre de gauche. Avec cette méthode, vous pouvez implémenter toute vérification personnalisée pour savoir si la ligne sélectionnée doit être modifiée ou non à l'intérieur du gestionnaire d'événements onSelectRow ou ondblClickRow. Si vous autorisez l'édition, vous appelez la méthode editRow de jqGrid. Cette méthode crée des contrôles d'entrée pour toutes les colonnes modifiables et l'utilisateur peut modifier les valeurs de ligne de manière naturelle. Les modifications seront sauvegardées si l'utilisateur appuie sur la touche "enter" ou annulée sur la touche "esc".

Je préfère personnellement implémenter l'appel de la méthode editRow à l'intérieur du gestionnaire d'événements ondblClickRow. Ainsi, l'utilisateur peut continuer à sélectionner des lignes comme d'habitude et peut utiliser un double clic pour l'édition de ligne. Le pseudo code ressemblera à ceci:

var lastSel = -1; 
var isRowEditable = function (id) { 
    // implement your criteria here 
    return true; 
}; 
var grid = jQuery('#list').jqGrid({ 
    // ... 
    ondblClickRow: function(id, ri, ci) { 
     if (isRowEditable(id)) { 
      // edit the row and save it on press "enter" key 
      grid.jqGrid('editRow',id,true); 
     } 
    }, 
    onSelectRow: function(id) { 
     if (id && id !== lastSel) { 
      // cancel editing of the previous selected row if it was in editing state. 
      // jqGrid hold intern savedRow array inside of jqGrid object, 
      // so it is safe to call restoreRow method with any id parameter 
      // if jqGrid not in editing state 
      grid.jqGrid('restoreRow',lastSel); 
      lastSel = id; 
     } 
    }, 
    pager: '#pager' 
}).jqGrid('navGrid','#pager',{edit:false}); 
+0

Merci pour votre contribution détaillée. Cela ressemble à une solution raisonnable. –

+0

@Oleg: ceci permet toujours l'édition en ligne et en forme de ligne. Comment empêcher en ligne et former l'édition de rangée désactivée aussi? – Andrus

2

Vous pouvez le faire logiquement. Vous devez avoir des critères pour les cellules que certaines cellules peuvent être modifiables et d'autres non.

Je l'ai implémenté en ligne.

Lorsque vous créez du code XML pour jqgrid, attribuez un identifiant à chaque ligne.

En fonction de ces identifiants, vous pouvez rendre les cellules de ces lignes modifiables ou non modifiables à l'aide des méthodes jqgrid.

ci-dessous est la méthode beforeEditCell:

beforeEditCell: function(rowid, cellname, value, iRow, iCol) { 
    // here identify row based on rowid 
    // if the row should not be editable than simply make the cells noneditable using 
    editCell(iRow, iCol, false); 
    jQuery(gridid).jqGrid("restoreCell",iRow,iCol); 

} 

Vous pouvez continuer à vous mettre en œuvre.

J'espère que ma suggestion vous aiderait. :)

Questions connexes