2011-01-21 93 views
7

我有一個ASP.NET MVC 3頁面。在它上面,我有一個表格,我使用來自ajax調用的JSON數據變成一個jqGrid。網格具有以下設置:jqGrid過濾器或按日期搜索不工作客戶端端

myGrid = $('#myGrid'); 
myGrid.jqGrid({ 
    caption: 'My Grid', 
    datatype: 'local', 
    data: data.rows, 
    height: 250, 
    pager: '#myPager', 
    viewrecords: true, 
    colModel: [ 
     ..., 
     { 
      label: 'blah', 
      name: 'blah', 
      align: 'left', 
      sortable: true, 
      editable: false, 
      width: 85, 
      formatter: 'date', 
      sorttype: 'date', 
      datefmt: 'm/d/Y', 
      formatoptions: { srcformat: 'm/d/Y', newformat: 'm/d/Y' } 
     }, 
     ... 
    ] 
}); 

// turn on filter toolbar 
myGrid.filterToolbar(); 

data.rows從ajax調用返回。這除了一個以外的所有方面都有效。我可以對客戶端進行分頁,對客戶端進行排序,然後按照我顯示colModel的字段進行搜索。這個'blah'字段是日期字段,它以mm/dd/yyyy格式正確顯示日期。但是,當我在工具欄中鍵入類似於11/17/2010的內容並按下回車鍵時,搜索將返回0條記錄。

所以我深深挖成jqGrid的代碼,以下是它所產生它搜索之前:

{"groupOp":"AND","rules":[{"field":"blah","op":"bw","data":"11/17/2010"}]} 

最終,當它經過的每一行,並評估在該領域的操作中,eval(M )& & p.push(本)線,m是這樣的:

(String(this.blah).substr(0,10) == String("11/17/2010")) 

基本上,它看起來對我來說,這不是承認該字段是一個日期。它調用parse而不是parseDate。任何人有任何想法如何解決這個問題?我知道搜索服務器端很容易,我可以通過該字符串,解析它,並巴姆。但是,如果可以的話,我想留在客戶端。我可以在Oleg和Tom放置的一些樣本中複製這個,所以它可能是一個問題,或者我在配置中丟失了一些東西...

+0

順便說一句,jqGrid可以爲你做AJAX調用,所以`data.rows`的用法將不再需要。看到一些鏈接從http://stackoverflow.com/questions/2835957/jquery-with-asp-net-mvc-calling-ajax-enabled-web-service/2836817#2836817,http://stackoverflow.com/questions/ 4169384/how-can-i-bind-my-view-model-to-a-jqgrid/4169848#4169848和http://www.trirand.com/blog/?PAGE_ID = 393 /特徵請求/休息支撐/#p21762。我可以繼續鏈接... – Oleg 2011-01-22 11:29:35

+0

其實,我不得不在我的ajax調用中包裝網格的創建。原因是我必須調用GridUnload(),因爲我在過濾器工具欄中動態更新了我的下拉式過濾器。我查看了文檔,找不到觸發器('reloadToolbar')。 – Milimetric 2011-01-25 20:19:17

回答

3

我覺得你的問題很有意思,所以我+1你的問題。因爲你的本地搜索過程中張貼在eval使用的線

(String(this.blah).substr(0,10) == String("11/17/2010")) 

我想你花多少時間去了解當地搜索是如何實現的。因爲您看到上面的行(請參閱(String(this.blah).substr(0,10) ...)不是應該完成的操作(String(this.blah)的值將是「2010-11-17」而不是「11/17/2010」),您可以覆蓋jqGrid的相應功能(功能_getStr裏面的$.jgrid.from)並解決問題的方式。

前段時間我花了很多時間準備相應的the demo,這表明了這種技術。該演示準備爲the answer in trirand forum。在搜索'benevise'的情況下,人們想找到字符串'bénevise'。所以人們必須實現真正的自定義本地搜索。我希望這些信息足以讓你解決你描述的問題。

已更新:在我看來,我發現了一個更簡單的解決方法。您應該爲具有該數據的'blah'列定義searchoptions: {sopt: ['eq','ne']}。然後"bw"(開頭)不會用於該列。 「等於」和「不等於」操作在本地搜索中正常工作。

更新2Here是我使用sopt選項的工作示例。