jqGrid avec inlineNav: est-il un moyen de forcer le bouton Ajouter pour réactiver?
Je suis en utilisant jqGrid 4.3.2 avec le inlineNav
option. Toutes les fonctions de modification de la grille se fait localement à l'aide de loadonce: true
et clientArray
. Lorsque l'utilisateur a terminé l'édition, cliquez sur un bouton "enregistrer" sur la forme et l'ensemble de la grille est publiée sur le serveur. Cela fonctionne très bien, pour la plupart, mais j'ai une bizarrerie. Si l'utilisateur ajoute une nouvelle ligne, puis clique sur le bouton enregistrer avant d'appuyer sur la touche enter pour confirmer la modification ou la désélection de la nouvelle ligne, le bouton ajouter sur la ligne navigator reste activé même après l'appel de saveRow
avant de poster et de rechargement. J'ai essayé resetSelection
et restoreRow
après la saveRow
appel, mais aucune de ces travaux. Mon enregistrer le code:
$("#submitButton").click(function () {
$("#theGrid").jqGrid('saveRow', $("#selectedRowId").val(), false, 'clientArray');
if (!ValidateGridData())
return false;
var rowData = $("#theGrid").jqGrid('getRowData');
var dataToSend = JSON.stringify(rowData);
$.ajax({
url: '@Url.Action("UpdateGridData")',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: dataToSend,
dataType: 'json',
async: false,
success: function (data, textStatus, jqXHR) {
$("#theGrid").jqGrid('setGridParam', { datatype: 'json' });
$("#theGrid").trigger('reloadGrid');
},
error: function (jqXHR, textStatus, errorThrown) {
alert('Error saving data: ' + textStatus + " " + errorThrown);
}
});
return true;
});
Est-il une manière que je peux convaincre le inline navigator que la nouvelle ligne est enregistré et l'utilisateur peut ajouter plusieurs lignes?
Vous devez vous connecter pour publier un commentaire.
L'ajout des boutons dans le navigateur par le inlineNav méthode a id qui construit à partir de la grille id, et le suffixe:
Pour activer le bouton, vous devez supprimer
'ui-state-disabled'
classe CSS:Pour désactiver le bouton, vous pouvez utiliser
.addClass('ui-state-disabled')
à la place.En outre, je ne vous recommande pas d'utiliser toute modification en ligne des méthodes comme
saveRow
directement. Dans le cas où vous ne sera probablement pas avoir le problème que vous essayez de résoudre. Regarde le code de la réponse. Il définiteditingRowId
etmyEditParam
commeet ensuite utiliser
inlineNav
avecmyEditParam
paramètre:Dans le cas où vous pouvez être sûr que
editingRowId
vous obtenir l'id de l'édition en cours de ligne ou deundefined
si aucune ligne d'édition. Ainsi, vous pouvez utiliser$(gridIdSelector + "_iledit").click();
au lieu de editRow pour modifier le courant de ligne sélectionnée. Dans le même temps, vous pouvez utiliser setSelection si nécessaire et de les simuler cliquez sur une autre édition en ligne boutons de navigation.Mis à JOUR: Si vous avez besoin vous pouvez toujours combiner les appels de
saveRow
à l'intérieur deonSelectRow
, mais vous pouvez tout d'abord utiliser la variableeditingRowId
et des secondesmyEditParam
qui sera commune pour l'édition de tous les moyens que vous utilisez:Si vous avez besoin d'autres options de modification en ligne des méthodes que vous pouvez inclure dans le
myEditParam
. Vous verrez queeditingRowId
est beaucoup mieux pour l'utiliser commelastSel
variable que vous trouverez dans la plupart d'édition en ligne des exemples.replace
sur leattr('class')
au lieu de.removeClass
. Fonctionne parfaitement. Merci!onSelectRow
appelersaveRow
sur la ligne sélectionnée précédemment, similaire au code de stackoverflow.com/q/2359011/27457". Ne vous recommandons pas l'utilisation de cette approche?