2012-02-15 5 views
0

EF4 MVC3 (C#)에서 jqgrid를 사용하고 있습니다. 나는 this에 대한 기반 검색 @Oleg의 솔루션, 잘 작동하고 내 요구에 적합합니다.jqgrid 검색 : 검색 열을 지정하는 방법?

나는 나의 표에 정의 된 다음과 같은 열이 : 당신이 볼 수 있듯이

  ... 
      { name: 'Stato', index: 'StatoTicketID', width: 20, align: 'left', sorttype: 'int', searchoptions: { sopt: ['eq']} }, 
      { name: 'StatoTicketID', index: 'StatoTicketID', width: 20, align: 'left', sorttype: 'int', hidden: true, searchoptions: { sopt: ['eq']} }, 
      ... 

, 열 Stato이 인덱스 StatoTicketID (숨겨진 정수 필드)에 의해 정렬됩니다 및 주문 잘 작동합니다. 내가 Stato 값으로 검색하고 싶습니다 동안

내가 Stato의 값을 검색하려고 문제는, 필터는, 문자열로 인덱스 StatoTicketID에 전달됩니다. 그래서 컨트롤러 내부에서 String 타입을 Int32로 변환 할 수 없다는 예외가 발생합니다.

내 경우처럼 색인이 다른 열에있을 때 검색을 적용 할 열을 지정하는 방법이 있습니까?

편집 & 해결 방법 : 지금은 나는 다음과 같은 해결 방법으로 내 문제를 해결했다.

 (inside foreach (Rule rule in rules) of FilterObjectSet by Oleg) 
     .... 

     if (rule.field == "StatoTicketID") 
      { 
       rule.field = "StatoTicket.Stato"; 
       propertyInfo = typeof(T).GetProperty("stringfield"); // where stringfield is a text type column of my model 
      } 

나는 내가있는 jqGrid에서 직접 필요한 행동을하시기 바랍니다 구현하는 방법을 알고 당신에 의해 친절한 응답을 기대, 그 우아한 해결책이 아니라 아주 잘 알고 있습니다. 사전에

덕분에

답변

3

당신이 너무 복잡 방법을 선택하는 것이 나에게 보인다. 나는 클라이언트에게 (단지 jqGrid에) Stato만을 보내고 StatoTicketID을해야만한다. StatoTicketID의 디자인 포인트에서 서버 구현의 일부이며 클라이언트가 이에 의존하지 않아야합니다.

StatoTickets 테이블의 Stato 열에 고유 제한 (또는 고유 색인)이있는 경우 필요할 때마다 StatoTicketID을 매우 빨리 찾을 수 있습니다. 따라서 jqGrid는 Stato에 대해서만 "알고"있고 포함 할 수 있으며 구현 세부 사항에 대해서는 StatoTicketID에 대한 정보가 없습니다.

Stato 열에 formatter: 'select'을 사용하면 문제를 해결할 수 있습니다. 이 경우 Stato 텍스트와 StatoTicketID 사이의 매핑을 에로드해야 전에 그리드가 생성된다는 것을 이해하는 것이 중요합니다. 경우에 Stato 열은 editoptions의 경우 대신 valuedataUrl을 사용할 수 없습니다

formatter: 'select', edittype: 'select', editoptions: {value: '12:Stato1;24:Stato2'}, 
stype: 'select', searchoptions: {value: ':All;12:Stato1;24:Stato2'} 

같은 특성을 가져야한다.

결과적으로 Stato 데이터를 StatoTicketID 데이터로 채울 수 있지만 해당 텍스트는 jqGrid에 의해 표시됩니다.

순수한 Stato 텍스트로 첫 번째 방법을 구현하는 것이 좋습니다. 모든 문제는 서버 부분에서만 해결할 수 있습니다.

+0

대단히 감사합니다. 올렉! 나는 두 번째 방법을 시도 할 것이다. 나는 내가 세부 사항을 지정하지 않았기 때문에 아마도 내가 채택한 해결책에 대한 당신의 우려를 이해한다 :'StatoTicketID'는'Stato' 필드에 주어진 '우선 순위'에 기초하여 주문을 할 수있게 해준다. 그래서 순수한 텍스트 내 경우에는 정렬 순서가 좋지 않습니다. 저는 두 번째 방법을 시도 할 것입니다. 제 생각에는 이것이 제게 가장 좋은 해결책이라고 생각합니다. 나는 너를 새롭게 지킬거야! 고마워요! – Larry

+0

@ 래리 : 천만에! 'loadonce : true '없이'datatype :'json''을 사용하면 서버 측의 정렬을 구현하므로 순수 텍스트 사용 후에도'name : 'Stato', index : 'StatoTicketID'를 계속 사용할 수 있습니다 값 "Stato"열에. 두 번째 방법을 선택하면''Stato ''컬럼을 편집 할 때 서버에 게시 될 데이터에주의해야합니다. 최종 솔루션까지 모든 것을 구현할지 여부를 알려주십시오. – Oleg

+0

THX. 첫 번째 솔루션을 구현하려고했지만 여전히 작동하지 않습니다. 이미 데이터 유형을 사용했습니다 : 'json'및 loadonce : false ... pheraps는 솔루션을 수정해야합니까? 두 번째 시도 중 ... THX를 계속 업데이트 해 드리겠습니다! – Larry