2011-10-24 77 views
0

這是一個我知道的問題已經在這裏和互聯網上的其他幾個地方問過。我已經嘗試了所有可以在StackOverflow網站上找到的解決方案,結果相同,沒有解決我的問題。JQGrid客戶端分類

我想從數據庫加載數據一次,然後在客戶端上執行所有排序操作。 loadonce屬性聽起來像它應該處理這個,但它似乎並沒有爲我工作。我也嘗試在各種事件處理程序中將數據類型設置爲本地,但沒有成功。

這是我用來實例化網格的代碼。

 $('#people_SelectedContacts').jqGrid({ 
     ajaxGridOptions:{ 
      type: "POST" 
     }, 
     datatype: function(data){ 
      $.ajax(klg.getAppRoot()+"AJAX/GetMatterProfileContacts",{ 
          data: JSON.stringify({ 
       MatterProfileID: $('#MatterProfileID').val() 
      }), 
      success: function(data){ 
       var contacts = data.ReturnValues; 
       var mygrid = $("#people_SelectedContacts")[0]; 
       mygrid.addJSONData(contacts); 
      }, 
      complete: function(){ 
       $("#people_SelectedContacts").setGridParam({datatype:'local'}); 
      }}); 
     }, 
     loadonce: true, 
     colNames:['lecID','lrlID','mjID','Role','Name','Company/Court', 'Business Phone', 'Email', 'Docket #'], 
     colModel:[ 
      {name:'LegalEntityContactID', hidden:true}, 
      {name:'LegalRoleLookupID', hidden:true}, 
      {name:'MatterJurisdictionID', hidden:true}, 
      {name:'LegalRoleLookupName', index:'legalrole'}, 
      {name:'FullName',index:'name'}, 
      {name:'Company',index:'company'}, 
      {name:'BusinessPhone',index:'bussphone'}, 
      {name:'Email',index:'email'}, 
      {name:'DocketNumber',index:'email'} 
     ], 
     sortable: true, 
     jsonReader: { 
      root:'MatterProfileContacts', 
      repeatitems: false, 
      id:"MatterProfileContactID" 
     } 
    }); 

數據正確加載到網格中,但正如我所說的,排序命令全部轉到並再次打到服務器。任何人都可以指出我的方向正確嗎?我從標準HTML表格切換到JQGrid的唯一原因是排序和分組。如果我無法讓客戶端分類工作,那就沒用了。

謝謝Stack Overflow社區。

回答

0

我改變了網格使用數據類型:'json',正如你所建議的奧列格。我仍然有排序問題,但我意識到這是因爲我在列模型中使用的index值。列模型的index值必須與從服務器返回的JSON對象的屬性名稱匹配。

1

您的問題的原因是您使用datatype作爲功能,這是99,9%的情況下不需要。問題是設置datatype: 'local'不是jqGrid在loadonce: true的情況下做的唯一的事情。最重要的是data_index參數將填充從服務器返回的數據。內部參數保存數據,並在本地排序和分頁時使用。您目前的實施不填寫data_index,所以loadonce: true無法正常工作。

而是使用datatype的功能,你可以用

datatype: 'json', 
serializeGridData: function (data) { return JSON.stringify(data); }, 
postData: { MatterProfileID: function() { return $('#MatterProfileID').val(); } } 

,你應該額外修改jsonReader包括在rootReturnValues。我認爲在更改之後,您將可以使用loadonce: true。可能還有其他一些小事情需要您另外做,但最重要的是您應該使用任何標準datatype而不是datatype作爲函數。

+0

雖然這並沒有直接回答我的問題,但確實讓我朝着正確的方向前進。我按照你的建議將網格改爲使用數據類型:'json'。我仍然有排序問題,但我意識到這是因爲我使用的索引值。我沒有意識到它必須匹配JSON數組的數據屬性。 – arb

+0

@ Zero21xxx:是的,如果服務器端數據'index'可以不同於'name'屬性。在本地數據的情況下或者在'loadonce:true'的情況下,'index'應該與'name'相同。我無法描述你需要解決的所有問題。例如,對於所有具有其他排序類型爲'text'(例如'integer'或'date')的列來說,包含'sorttype'可能很重要。無論如何,如果你現在使用'datatype:'json'' - 你的方式是正確的。 – Oleg