jqGrid и предварительный выбор строк с опцией множественного выбора - PullRequest
0 голосов
/ 07 марта 2011

У меня есть jqGrid с множественным выбором.
Я хотел бы иметь возможность предварительно проверить определенное количество строк, если другой столбец имеет значение true, например.
То, что я сделал до сих пор, это передача элемента (столбца) с сервера, который содержит логическое значение. Я скрываю этот столбец в событии gridComplete.
Я могу выбрать - и проверить предопределенную строку во время загрузки сетки?

UPDATE:

Это мой код:

jQuery("#OrdersGrid").jqGrid({
    url: $.SalesOrders.url.OrdersFetchUrl,
    postData: { OrderStatus: orderStatus },
    datatype: 'json',
    mtype: 'POST',
    colNames: ['N.Ordine', 'Cliente', 'Ragione Sociale', 'Stato', 'Fido', 'Data', ''],
    colModel: [
               { name: 'Number', index: 'Number', editable: false, resizable: true, sortable: false, width: 76, align: 'left' },
               { name: 'CustomerCode', index: 'CustomerCode', editable: false, resizable: true, sortable: false, width: 50, align: 'left' },
               { name: 'CustomerName', index: 'CustomerName', editable: false, resizable: true, sortable: false, width: 410, align: 'left' },
               { name: 'Status', index: 'Status', editable: false, resizable: true, sortable: false, width: 40, align: 'center' },
               { name: 'LoCStatus', index: 'LoCStatus', editable: false, resizable: true, sortable: false, width: 40, align: 'center' },
               { name: 'Date', index: 'Date', editable: false, resizable: true, sortable: false, width: 70, align: 'right' },
               { name: 'Checked', index: 'Checked', editable: false, resizable: false, visible: false }
              ],
    pager: $('#OrdersPager'),
    rowNum: 30,
    width: 794,
    height: 220,
    viewrecords: true,
    shrinkToFit: false,
    scroll: true,
    rownumbers: true,
    hidegrid: false,
    multiselect: true,
    emptyrecords: "Nessun record presente",
    loadComplete: function (data) {
        if (data.rows.length > 0) {
            for (var i = 0; i < data.rows.length; i++) {
                if (data.rows[i].cell[6] == 'true') {
                    jQuery("#OrdersGrid").jqGrid('setSelection', data.rows[i].id, true);
                }
            }
        }
        jQuery("#OrdersGrid").jqGrid('hideCol', 'Checked');
    }
});

Я реализовал решение Олега, и оно работает как шарм.

1 Ответ

2 голосов
/ 07 марта 2011

Вы не опубликовали определение сетки, которую вы используете, поэтому некоторые вопросы для меня остаются открытыми.Тем не менее, я надеюсь, что вы найдете ответ на свой вопрос здесь включенной в ответ демонстрации используется параметр loadonce:true, который делает все более сложным.Строки, которые будут выбраны, находятся не на первой странице загруженных данных.Более того, в демоверсии нет столбцов (даже скрытых), которые можно использовать для определения того, какие строки следует выбрать.Вместо этого информация о выборе в сетке будет отправлена ​​с сервера как часть userdata части ответа JSON.Этот способ является более общим, и я надеюсь, что он будет работать и в вашей сетке.

ОБНОВЛЕНО : я считаю ваш код хорошим.Я видел только небольшие места для оптимизации:

  1. Свойства editable: false, resizable: true и align: 'left' по умолчанию в colModel (см. документация jqGrid ).Поэтому я предлагаю вам удалить значения.
  2. Свойство visible: false не существует в colModel.Вы имеете в виду, вероятно, hidden: true.После использования правильного свойства оператор jQuery("#OrdersGrid").jqGrid('hideCol', 'Checked'); не понадобится в loadComplete.
  3. Вместо использования jQuery("#OrdersGrid") каждый раз в цикле вы можете сохранить значение в переменной: var mygrid = jQuery("#OrdersGrid"); до инициализации jqGrid, и тогда ваш код будет mygrid.jqGrid({...,loadComplete: function (data) {...mygrid.jqGrid('setSelection', ...

Некоторые дополнительные замечания.Оператор data.rows[i].cell[6] = 'true' показывает, что вы сериализуете свойство Checked с Checked.ToString().Вместо этого вы можете использовать Checked?"1":"0" и уменьшить размер передаваемых данных.Я использую много сеток с formatter:"checkbox", которые интерпретируют и «1», и «true», как проверено.В вашем случае вы абсолютно свободны в формате данных, поэтому вы можете использовать «1» и «0» или даже «1» и «».

Если вы используете проверенный столбец только для передачи информации оВыбор строки вы можете удалить столбец Checked из сетки вообще.В параметре data loadComplete вы все равно увидите свойство Checked (data.rows[i].cell[6]), но количество столбцов уменьшится.

...