Ich frage mich, wie ich ReloadGrid nach einer Inline-Bearbeitung einer Zeile auslösen kann.jqgrid Gitter nach erfolgreichem Inline-Update/Inline-Erstellung von Datensatz neu laden
<script type="text/javascript">
jQuery(document).ready(function(){
var lastcell;
jQuery("#grid").jqGrid({
url:'{{ json_data_handler }}?year={{ get_param_year }}&month={{ get_param_month }}&project_id={{ get_param_project_id }}',
datatype: "json",
mtype: 'GET',
colNames:['hour_record_pk', 'project_pk', 'weekday', 'date', 'sum', 'description'],
colModel:[
{name:'hour_record_pk',index:'hour_record_pk', width:55, sortable:false, editable:true, editoptions:{readonly:true,size:10}},
{name:'project_pk',index:'project_pk', width:55, sortable:false, editable:true, editoptions:{readonly:true,size:10}},
{name:'weekday',index:'weekday', width:300, editable:false, sortable:false},
{name:'date_str',index:'date_str', width:300, editable:true, sortable:false, editoptions:{readonly:true}},
{name:'sum',index:'sum', width:100, editable:true, sortable:true,editrules:{number:true,minValue:0,maxValue:24,required:true}},
{name:'description',index:'description', width:600, editable:true, sortable:false,},
],
jsonReader : {
repeatitems:false
},
rowNum:31,
rowList:[10,20,31],
//pager: jQuery('#gridpager'),
sortname: 'id',
viewrecords: true,
sortorder: "asc",
width: 800,
height: 750,
caption:"Hour Record Overview",
reloadAfterEdit: true, //seems to have no effect
reloadAfterSubmit: true, //seems to have no effect
onSelectRow: function(id){
if(id && id!==lastcell){
jQuery('#grid').jqGrid('restoreRow',lastcell);
jQuery('#grid').jqGrid('editRow',id,true);
lastcell=id;
}
},
editurl:"{% url set_hour_record_json_set %}"
}).navGrid('#gridpager');
});
function reload(result) {
$("#grid").trigger("reloadGrid");
}
Ich habe bereits eine Reload-Methode, aber ich bin mir nicht sicher, wo sie setzt in Ich habe versucht:.
jQuery('#grid').jqGrid('editRow',id,true,reload());
aber dies ist bereits aufgerufen, wenn der Benutzer in eine anklickt Reihe. Der obige Code ermöglicht dem Benutzer, in eine Zeile zu klicken, und wenn Sie die Eingabetaste drücken, werden die Daten übermittelt und der Datensatz aktualisiert oder erstellt.
Nachdem der Benutzer ein neues Objekt erstellt habe, muss ich das Raster neu laden, da ich die Objekt-ID des neu erstellten Objekts benötige, um die weitere Bearbeitung dieser Zeile vorzunehmen.
Edit: Die Lösung:
onSelectRow: function(row_id){
if(row_id != null) {
if(row_id !== last_selected_row) {
jQuery('#grid').jqGrid('restoreRow',last_selected_row);
jQuery('#grid').jqGrid('saveRow',row_id)
.editRow(row_id, true,false,reload);
last_selected_row = row_id;
} else {
last_selected_row=row_id;
}
}
},
Update: Für die Zukunft. Alle Benutzer, die mit js-Grids beginnen, können sich auch einen Blick auf Slickgrid werfen, da ich von jqgrid zu slickgrid wechselte und es nur weiterempfehlen kann.
Ihre endgültige Edit: die Lösung hat mir sehr geholfen. Danke für die Aufnahme. – Tareq
Ich kann den obigen Code nicht funktionieren, es gibt mir TypeError: jQuery ("# tnc-list"). JqGrid ("saveRow", row_id) .editRow ist keine Funktion – Marvzz
Hat nicht funktioniert, scrollen Sie nach unten, es funktioniert Code – ymakux