jqgrid-обновление сетки после загрузки файла ajax


Как обновить сетку на основе jqgrid из-за пределов самой сетки? В коде для сетки существует опция вызова reloadGrid. Тем не менее, я хочу перезагрузить сетку после загрузки файла ajax, вне кода jqgrid. Как я мог бы назвать reloadGrid в этом контексте?

Я понимаю, что могу полностью перезагрузить всю страницу с помощью чего-то вроде: location.reload(); но это перезагружает всю партию и возвращает меня на первую страницу результатов для сетки и вроде как разрушает цель использования ajax для загрузки файла в первую очередь.

Некоторый код:

ReloadGrid вызывается изнутри jqgrid следующим образом:

$("#thegrid").trigger("reloadGrid");

Но он ничего не делает, когда вызывается из моего ajaxupload:

        onComplete: function(file, response) {
            if (response == 'success') {
                        //location.reload();
                        $("#thegrid").trigger("reloadGrid");
                    }else if (response == 'error') {
                        alert("Doh!");
                    }

Если я раскомментирую location.reload(), страница перезагружается, но с незафиксированным триггером (как в приведенном выше примере) ничего не происходит вообще. Так как же мне перезагрузить эту сетку?

2 2

2 ответа:

Я не вижу проблем в использовании $("#thegrid").trigger("reloadGrid") вне jqGrid. Вероятно, проблема заключается в отношении между onComplete из ajaxupload и $("#thegrid") вообще.

Например, вы можете определить внешнюю кнопку на той же странице, что и jqGrid с элементом <table>, имеющим id= "thegrid", и использовать

$("#button").click(function() {
    if ($("#thegrid").length === 0) {
        alert("no element with id='thegrid' is found");
    }
    if ($.isFunction($("#thegrid").jqGrid) !== true) {
        alert("$('#thegrid') is not jqGrid");
    }
    var e = $("#thegrid").data("events");
    if (typeof(e) !== "undefined" && typeof(e.reloadGrid) !== "undefined") {
        $("#thegrid").trigger("reloadGrid");
    } else {
        alert("$('#thegrid') is not bound to 'reloadGrid' function");
    }
}

Вы увидите, что код работает без каких-либо предупреждений. Вы можете включить тот же код в обработчик onComplete Вашего ajaxupload.

Чтобы убедиться, что функция reloadGrid работает, вы можете использовать loadComplete :

loadComplete: function() {
    alert("grid is loaded/reloaded");
}

Обновлено : начиная с jQuery 1.8 следует использовать $._data($("#thegrid")[0], "events"); вместо $("#thegrid").data("events"), чтобы получить список всех событий сетки.

Создайте функцию кода для загрузки jqgrid. И сначала выгрузите Jqgrid и вызовите предыдущую функцию:

$("#thegrid").GridUnload();
Loadthegrid();

Надеюсь, это поможет.