jqGrid reloadGrid не работает при удалении последней записи - PullRequest
1 голос
/ 02 сентября 2011

У меня есть jqGrid на моей странице, которая получает свои записи, используя сообщение json на сервер. На этой же странице у меня также есть кнопка удаления. Нажатие кнопки удаления использует запись ajax на сервер, чтобы удалить выбранную запись. После удаления записи, если сервер возвращает код успеха, мне нужно обновить сетку.

Кажется, что работает нормально, за исключением случаев, когда в сетке есть только одна запись. Последняя запись, которую я удаляю, никогда не удаляется из таблицы. Даже если я нажму кнопку обновления в нижнем колонтитуле, она все равно не исчезнет. Когда имеется более одной записи, она обновляется так, как я ожидаю.

Я новичок в jqGrid, поэтому я уверен, что делаю что-то не так. Любая помощь будет оценена.

jqGrid определение

    $('#gridOrgs').jqGrid({
        url: 'some url goes here',
        datatype: 'json',
        mtype: 'POST',
        loadonce:false,
        colNames: ['ID', 'Name', 'City', 'Province', 'Admin'],
        colModel: [
            { name: 'Id', index: 'Id', hidedlg: true, hidden: true, sortable: false },
            { name: 'CompanyName', index: 'CompanyName', width: 200, sorttype: 'text' },
            { name: 'City', index: 'City', width: 150, sorttype: 'text' },
            { name: 'Province', index: 'Province', width: 150, sorttype: 'text' },
            { name: 'IsAdmin', index: 'IsAdmin', width: 50, sorttype: 'text', formatter: 'checkbox', align: 'center'},
            ],
        pager: '#pagerOrgs',
        jsonReader: {
            repeatitems: false,
            id: 'Id' },
        rowNum: 10,
        rowList: [10, 25, 50, 75, 100],
        sortname: 'CompanyName',
        sortorder: 'desc',
        viewrecords: true,
        caption: 'Companies',
        hidegrid: false,
        width: 650,
        height: 400,
        onSelectRow: function (id) {
                if (id)
                    RowSelected(id, $('#gridOrgs').getCell(id,'IsAdmin'));
                else
                    NoRowSelected();
            }
    });
    jQuery("#gridOrgs").jqGrid('navGrid','#pagerOrgs',{edit:false,add:false,del:false});

Удалить событие нажатия кнопки:

    $('#btnDelete').click(function() {
        var id = jQuery("#gridOrgs").jqGrid('getGridParam','selrow');

        if (id)
           $.post('@Url.Action("Json_Delete", "Organization")', {'id': id}, function(data){ProcessDeleteResponse(data.result);}, 'json');
        else
            $('#dialogNothingSelected').dialog('open');
    });

    function ProcessDeleteResponse(resultCode) {
        if (resultCode == 'success')
            $('#gridOrgs').trigger('reloadGrid'); 
    }

Я тоже пробовал

.trigger ('reloadGrid', [{page: 1}]);

.trigger ('reloadGrid', [{current: true}]);

Независимо от того, что я делаю, последняя запись остается в сетке.

И последнее: когда я запускаю reloadGrid, сетка делает вызов серверу и получает обновленную информацию. Обновленная информация содержит 0 для общего количества записей.

Еще раз спасибо.

1 Ответ

0 голосов
/ 08 сентября 2011

Кажется, я смог решить эту проблему, вызвав следующий метод:

$('#gridOrgs').jqGrid('delRowData', id);

Дайте мне знать, если у кого-нибудь есть лучшее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...