2013-07-11 21 views
0

如何避免在行計數爲零並應用過濾器時從jQgrid獲取異常。我的代碼看起來像這樣當網格中的行數爲零時過濾jqgrid時出現異常

function filterGrid(grid, siteId, buildingId, cityId, selectedType) { 
     var today = new Date(); 
     var dd = today.getDate(); 
     var mm = today.getMonth() + 1; //January is 0! 

     var yyyy = today.getFullYear(); 
     if (dd < 10) { dd = '0' + dd } if (mm < 10) { mm = '0' + mm } today = mm + '/' + dd + '/' + yyyy; 

     if (cityId == -1) { 
      grid.setGridParam({ search: false }); 
     } 
     else { 
      var filter = { groupOp: "AND", rules: [{ field: "CityID", op: "eq", data: cityId}] }; 

      if (siteId >= 0) 
       filter = { groupOp: "AND", rules: [{ field: "CityID", op: "eq", data: cityId }, { field: "SiteID", op: "eq", data: siteId}] }; // , { field: "BuildingID", op: "eq", data: buildingId} 

      if (buildingId >= 0) 
       filter = { groupOp: "AND", rules: [{ field: "CityID", op: "eq", data: cityId }, { field: "SiteID", op: "eq", data: siteId }, { field: "BuildingID", op: "eq", data: buildingId}] }; 

      if (selectedType == "Outstanding Books") 
       filter = { groupOp: "AND", rules: [{ field: "CityID", op: "eq", data: cityId }, { field: "SiteID", op: "eq", data: siteId }, { field: "BuildingID", op: "eq", data: buildingId }, { field: "IsReturnDateNull", op: 'eq', data: true }, { field: "DueDate", op: 'gt', data: today}] }; 

      //For filtering 
      grid.setGridParam({ search: true, postData: { filters: JSON.stringify(filter)} }); 

      //For searching 
      //grid.setGridParam({ search: true, postData: { searchOper: "eq", searchField: "Status", searchString: selectedVal} }); 
     } 

     grid.trigger("reloadGrid"); 
    } 

我寫的作品完美的罰款,但如果數據源沒有記錄到與柵格然後我得到一個例外,我想獲得該行的綁定算到一個隱藏字段中的代碼在服務器端和客戶端,如果隱藏字段中的行數爲零,則跳過搜索,但由於在異步回調期間數據源被分配給jqgrid,因此隱藏字段中的值沒有得到更新(始終在客戶端的隱藏字段中獲得空字符串),所以任何機構都可以幫助我避免在沒有綁定數據的情況下從jqgrid獲取null異常。

回答

0

我終於找到了這個問題的答案。我使用jqgrid的搜索事件,在服務器端,我從包含當前行的隱藏字段獲得行計數,如果行計數爲0,則取消搜索操作。

protected void grdBookTransaction_Searching(object sender, Trirand.Web.UI.WebControls.JQGridSearchEventArgs e) 
    { 
     if (string.IsNullOrEmpty(GridCount.Value) || GridCount.Value == "0") 
     { 
      e.Cancel = true; 
     } 
    }