2011-03-07 38 views
0

我有一個jqGrid多選。
例如,如果另一列爲真,我希望能夠預先檢查一定數量的行。
我到目前爲止所做的是從包含布爾值的服務器傳遞一個元素(列)。 我將這個列隱藏在gridComplete事件中。
我可以選擇 - 並在網格加載期間檢查預定義的行嗎?jqGrid和預選多行選項

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

我實現了奧列格的解決方案,它就像一個魅力。

回答

2

你沒有發佈你使用的網格的定義,所以對我的一些問題保持打開狀態。不過,我希望你能在你的問題here上找到答案。在答案中包含的the demo使用參數loadonce:true,這使得所有更復雜。將被選中的行不在加載的數據的第一頁上。此外,在演示中沒有列(甚至隱藏)可用於確定應選擇哪些行。取而代之的是,關於網格中的選擇信息將作爲JSON響應的一部分userdata從服務器發送。這種方式更通用,我希望它也能在你的網格中工作。

已更新:我覺得你的代碼不錯。我看到的只是小地方的優化:

  1. 性能editable: falseresizable: truealign: 'left'是在colModel默認(參見jqGrid documentation)。所以我建議你刪除這些值。
  2. 財產visible: false不存在於colModel。你的意思可能是hidden: true。在使用正確的財產之後,loadComplete中不需要陳述jQuery("#OrdersGrid").jqGrid('hideCol', 'Checked');
  3. 並非每次在循環中,你可以保存在一個變量的值時使用jQuery("#OrdersGrid")的:jqGrid的初始化,然後才var mygrid = jQuery("#OrdersGrid");你的代碼將mygrid.jqGrid({...,loadComplete: function (data) {...mygrid.jqGrid('setSelection', ...

一些補充說明。聲明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]),但您可以減少列數。

+0

我附上了一些代碼。正如你所看到的,我的MVC控制器流式傳輸了一列,檢查了哪一個是我的鑑別器。我已經在你發給我的鏈接之一中使用了這個例子,它工作正常。你對這個解決方案有什麼看法? – LeftyX 2011-03-07 17:06:03

+0

@LeftyX:我更新了我的答案,並在代碼中加入了一些小建議。 – Oleg 2011-03-07 17:45:54

+0

非常有幫助。我傾向於不優化JavaScript,但我知道我應該像在服務器端那樣。 – LeftyX 2011-03-08 08:57:59