Как удалить несколько строк в jqgrid, если метод selarrrow возвращает массивы, которые имеют более 1 индекса? - PullRequest
2 голосов
/ 20 сентября 2011

У меня есть сетка с multiselect = true, что-то вроде это , вы можете нажать на каждый флажок и затем удалить, когда я удаляю свою первую строку, я знаю, что метод selarrrow создает и массивирует. Он просто удаляет, но когда я хочу удалить вторую строку, он просто никогда не делает метод delRowData, а когда я выбираю несколько флажков, он просто удаляет первую. Я думаю, что мой метод повторяется снова и снова и никогда не удаляет хотя бы визуально другой ряд, как я могу это исправить? Любой совет, спасибо

это мой метод:

onSelectRow:function(id) {
    $("#mySelect").change(function (){ 
        if(($("#mySelect option:selected").text()) == 'Deleted') {
            var id = $("#list2").getGridParam('selarrrow');
            for(var i =0; i<id.length;i++) {
                $("#list2").jqGrid('delRowData',id[i]);
        }
    });
}

HTML

</head>
<body>

<div>
            Move to:
            <select id="mySelect">

            <option value="1">Select and option</option>
            <option value="2">Trash</option>
            <option value="3">Deleted</option>

            </select>
</div>

<table id="list2"></table>
<div id="pager2"></div> 
</body>
</html>

JS

$("#Inbox").click(function () {
    $.post('../../view/inbox.html', function (data) {
        $('#panelCenter_1_1').html(data);
        $("#list2").jqGrid({
            url: '../..controller/controllerShowInbox.php',
            datatype: 'json',
            colNames: ['From', 'Date', 'Title', 'Message'],
            colModel: [
                { display: 'From', name: 'name', width: 50, sortable: true, align: 'left' },
                { display: 'Date', name: 'date', width: 150, sortable: true, align: 'left' },
                { display: 'Title', name: 'title', width: 150, sortable: true, align: 'left' },
                { display: 'Message', name: 'message', width: 150, sortable: true, align: 'left' },
            ],
            searchitems: [
                { display: 'From', name: 'name' },
                { display: 'Date', name: 'date' },
                { display: 'Title', name: 'title' },
                { display: 'Message', name: 'message' },
            ],
            rowNum: 10,
            rowList: [10, 20, 30],
            pager: '#pager2',
            sortname: 'id_usuario',
            viewrecords: true,
            sortorder: "desc",
            caption: "Inbox",
            multiselect: true,
            multiboxonly: true,
            onSelectRow: function (id) {
                $("#mySelect").change(function () {
                    if (($("#mySelect option:selected").text()) == 'Trash') {
                        var id = $("#list2").getGridParam('selarrrow');
                        if (id != '') {
                            var grid = $("#list2");
                            grid.trigger("reloadGrid");
                            $.post('../../controller/controllerChangeStatus.php', { id: id }, function (data) {
                                $('#panelCenter_2_1').html(data);
                                grid.trigger("reloadGrid");
                            });
                        }
                    } else if (($("#mySelect option:selected").text()) == 'Deleted') {
                        id = $("#list2").getGridParam('selarrrow');
                        if (id != '') {
                            var grid = $("#list2");
                            grid.trigger("reloadGrid");
                            $.post('../../controller/controllerChangeStatus.php', { id: id }, function (data) {
                                $('#panelCenter_2_1').html(data);
                                grid.trigger("reloadGrid");
                            });
                        }
                    } else {
                    }
                });
            }
        });
    });
});

Ответы [ 3 ]

2 голосов
/ 22 сентября 2011

Ваш код выглядит очень странно для меня. Я не могу объяснить эффекты, которые вы описываете, без демонстрационного кода, но я мог бы указать вам на некоторые места в коде, которые следует переписать.

Первая проблема: вы используете id параметр в строке onSelectRow:function(id), а затем используете то же имя переменной id для объявления var id = $("#list2").getGridParam('selarrrow');. Я не понимаю, зачем ты это делаешь. Если вам не нужен параметр onSelectRow, вы можете просто использовать onSelectRow:function(), что сделает код более понятным.

Вторые проблемы: вы используете привязку к событию change в $("#mySelect").change, но вы используете оператор внутри другого события onSelectRow. Так что на каждом выделении строки у вас будет еще один обработчик события change . Например, вы должны заменить тело от $("#mySelect").change(function (){ на alert("changed!"). Затем вы должны выбрать две разные строки и изменить параметр в «#mySelect». Вы увидите два оповещения. Затем вы выбираете другую строку и меняете параметр в «#mySelect». Вы увидите три оповещения. И так далее.

Так что вы должны переписать свой код любым способом. Если у вас все еще будет та же проблема, вы должны включить полный демонстрационный код (включая HTML-код с <select id="mySelect">...), который можно использовать для воспроизведения вашей проблемы.

1 голос
/ 30 сентября 2011

Я использую другой подход. Я строю вектор из выбранных идентификаторов строк, а затем обрабатываю их на стороне сервера единого пакета состояний, а затем перезагружаю сетку.

Более или менее код.

var righe = $(nomeGrigliaFiglia).getGridParam("selarrrow");
if ((righe == null) || (righe.length == 0)) {
    return false;
}
var chiavi = [];
for (var i = 0; i < righe.length; i++) {
    var Id = righe[i];
    var data = $(nomeGrigliaFiglia).jqGrid('getRowData', Id);
    // Process your data in here
    chiavi[i] = new Array(2)
    chiavi[i][0] = data.FieldKey;
    chiavi[i][1] = data.FieldChildId;
}

Обратите внимание, что я использую это для отправки int [][] в C # Action

0 голосов
/ 04 августа 2012
  1. multiselect: true

  2. в вашем процессе обработки данных php $SQL .= "DELETE FROM ". $table. " WHERE no in ($_POST[id]);" ;

...