jqGrid和使用multiselect选项预选行

时间:2011-03-07 12:49:14

标签: jquery jqgrid multi-select

我有一个带有多选的jqGrid 例如,如果另一列为真,我希望能够预先检查一定数量的行 到目前为止我所做的是从服务器传递一个包含布尔值的元素(列)。 我在gridComplete事件中隐藏了这一列 我可以选择 - 并在加载网格时检查预定义的行吗?

更新:

这是我的代码:

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');
    }
});

我已经实施了Oleg的解决方案,它就像一个魅力。

1 个答案:

答案 0 :(得分:2)

您没有发布您使用的网格定义,因此我的一些问题仍然存在。不过,我希望你能在你的问题上找到答案here。在答案中包含的the demo中使用参数loadonce:true,这使得更复杂。将被选择的行不在加载数据的第一页上。此外,在演示中没有列(甚至隐藏)可用于确定应选择哪些行。取而代之的是,网格中的选择信息将作为JSON响应的userdata部分的一部分从服务器发送。这种方式更为通用,我希望它也可以在您的网格中使用。

更新:我发现您的代码很好。我只看到了优化的小地方:

  1. 属性editable: falseresizable: truealign: 'left'colModel中的默认属性(请参阅jqGrid documentation)。所以我建议你删除这些值。
  2. visible: false中不存在colModel属性。你的意思是hidden: true。使用正确的属性后,jQuery("#OrdersGrid").jqGrid('hideCol', 'Checked');
  3. 中将不需要语句loadComplete
  4. 而不是每次在循环中使用jQuery("#OrdersGrid"),您可以在jqGrid初始化之前将值保存在变量var mygrid = jQuery("#OrdersGrid");中,然后您的代码将为mygrid.jqGrid({...,loadComplete: function (data) {...mygrid.jqGrid('setSelection', ...
  5. 其他一些评论。声明data.rows[i].cell[6] = 'true'表示您使用Checked序列化Checked.ToString()属性。您可以使用Checked?"1":"0"代替并减少传输数据的大小。我使用了formatter:"checkbox"的许多网格,它们将“1”和“真”都解释为已选中。在您的情况下,您完全免费使用数据格式,因此您可以使用“1”和“0”甚至“1”和“”。

    如果仅使用“已选中”列传输有关行选择的信息,则可以从网格中删除Checked列。在data loadComplete参数中,您仍会看到Checked属性(data.rows[i].cell[6]),但会减少列数。