2011-01-21 3 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을 표시하는 필드를 제외한 모든 필드를 검색 할 수 있습니다. 이 '어쩌구'필드는 날짜 필드이며 mm/dd/yyyy 형식으로 날짜를 올바르게 표시합니다. 그러나 툴바에 11/17/2010과 같은 것을 입력하고 Enter 키를 누르면 검색시 0 개의 레코드가 반환됩니다.

는 그래서있는 jqGrid 코드로 깊이 파고, 여기가 검색하기 전에 생성 작업은 다음과 같습니다 (m

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

를 결국,이 모든 행을 통해 갈 때하고, 현장에서 평가를 작업을 평가 이 필드가 날짜임을 인식하지 못할 것처럼 그것은 나에게 보이는, 기본적으로

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

:) & & p.push (이) 라인은 m이 있습니다. parseDate 대신 parse를 호출합니다. 누구든지이 문제를 해결할 수있는 아이디어가 있습니까? 나는 서버 측을 검색하는 것이 쉽다는 것을 알고, 나는 그 문자열을 전달하고, 그것을 파싱하고, bam 할 수있다. 그러나 가능한 한 고객 측에 머물고 싶습니다. 올레그와 톰이 올린 샘플 중 일부에서 이것을 복제 할 수 있었기 때문에 문제가 있거나 구성에서 뭔가를 잃어 버렸습니다 ...

+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

+0

사실, 내 아약스 호출 내에서 그리드의 생성을 포장했다. 그 이유는 필터 툴바에서 드롭 다운 필터를 동적으로 업데이트하기 때문에 GridUnload()를 호출해야한다는 것입니다. 설명서를 살펴본 후 트리거 ('reloadToolbar')와 같은 것을 찾을 수 없습니다. – Milimetric

답변

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"대신 "2010-11-17"이 될 것입니다), jqGrid의 해당 기능을 덮어 쓸 수 있습니다 (기능 _getStr 안에 $.jgrid.from) 그리고 문제를 해결하는 방법.

얼마 전이 기술을 입증하는 해당 the demo을 준비하는 데 많은 시간을 할애합니다. 데모는 the answer in trirand forum으로 준비되었습니다. 질문에서 'benevise'을 검색 할 때 'bénevise'과 같은 문자열을 찾고 싶습니다. 따라서 사용자 정의 로컬 검색을 구현해야합니다. 정보가 귀하가 설명하는 문제를 해결하기에 충분할 것으로 기대합니다.

업데이트 : 훨씬 간단한 해결 방법을 찾은 것 같습니다. 데이터가있는 'blah' 열에 대해 searchoptions: {sopt: ['eq','ne']}을 정의해야합니다. 그런 다음 "bw" (시작 부분)은 열에 사용되지 않습니다. "동일 함"과 "같지 않음"연산은 로컬 검색에서 올바르게 작동합니다.

업데이트 2 : Heresopt 옵션을 사용하는 작업 예입니다.

+0

좋아요, 예제를 통해 작업했는데 원본 데이터를 변경하면 작동합니다. 사용중인 데이터에 "2007-09-01"과 같이 정의 된 날짜가 있음을 확인했습니다. 내 데이터 : new Date ("2007-09-01"). 그 이유는 ASP.NET MVC에서 소스 데이터를 가져오고 JSON.parse를 재정 의하여 Microsoft의 날짜 형식을 올바르게 해석해야하기 때문입니다./^ \/Date \\ ((\ d +) \\) \/$/ 그리드에는 문제가 없지만 Date 객체를 전달할 수 있으면 좋을 것입니다. 필요한 유일한 변경 사항은 parseDate 함수에 있다고 생각합니다. if (Object.prototype.toString.call (e) === '[object Date]') {return e; } 감사합니다. 올렉! – Milimetric

관련 문제