2016-09-22 7 views
1

서버 측 페이징으로 igGrid를 빌드 중입니다. 그리드는 Entity Framework를 사용하여 Visual Studio에서 자동 생성 된 OData v3 컨트롤러에 연결됩니다. 필터 및 정렬 작업은 정상적으로 작동하지만 페이징은 작동하지 않습니다.서버 측 페이징이 작동하지 않는 igGrid

그리드가 페이지 = x와 pageSize = y를 쿼리 문자열에 넣고 있지만 OData 형식이 $ top = x 및 $ skip = y 인 문제가있는 것으로 보입니다. $ skip의 값은 index * pageSize 일 필요가 있기 때문에 이름 페이지와 pageSize 만 변경하는 것은 불충분합니다. 페이지 및 pageSize 지원하는 컨트롤러를 편집하는 여러 가지 방법을 시도했지만 아무 소용.

필자는 $ top 및 $ skip 기능을 가진 OData 요청 URL을 브라우저 주소창에 수동으로 입력하여 원하는 결과를 얻을 수 있습니다. 그리드에 $ top 및 $ skip을 사용하게하는 방법이 있습니까? 그리드 자체는 C# 컨트롤러에 정의되어 있으며 모델의 일부로 페이지에 전달되며 그 때문에 GridPaging 객체의 pageIndexUrlKey 및 pageSizeUrlKey 속성에 액세스 할 수 없다는 것을 알게되었습니다. grid.OData가 true로 설정됩니다.

+2

기본적으로 페이징은 $ top 및 $ skip을 사용하여 OData 쿼리 문자열을 보내야합니다. igGrid 구성을 게시 할 수 있습니까? –

+0

GridModel grid = 새 GridModel(); grid.EnableUTCDates = true; grid.ID = "membersGrid"; grid.FixedHeaders = false; grid.DefaultColumnWidth = "100px"; #region [페이징] GridPaging paging = new GridPaging(); paging.Type = OpType.Remote; paging.PageSize = 10; paging.CurrentPageIndex = 0; paging.PageSizeList = 새 목록 {10, 25, 50, 100}; grid.Features.Add (paging); #endregion grid.DataSourceUrl = "/ odata/viewMemberBalances"; grid.ResponseDataKey = "value"; grid.OData = true; –

+0

답장을 보내 주셔서 감사합니다. 이것은 올바른 쿼리 문자열 매개 변수를 사용하는 그리드를 얻고 있지만 여전히 2 가지 문제가 있습니다. 1) 페이지가 처음로드 될 때 그리드는 page와 pageSize 쿼리 params를 호출하여 페이지까지 모든 레코드를 표시합니다 크기는 사용자에 의해 변경됩니다. 2) 쿼리 문자열에 $ inlinecount = allpages 매개 변수가 없으므로 컨트롤러가 그리드에 더 많은 항목이 있음을 알려주지 않으며 사용자에게 한 페이지 만 표시됩니다. 수동으로 $ inlinecount = allpages를 쿼리 문자열에 추가하면 카운트가 반환된다는 것을 확인했습니다. –

답변

1

기본적으로 Grid MVC 도우미 래퍼는 pageSizepage과 같이 사용자 지정 쿼리 매개 변수에 pageSizeUrlKeypageIndexUrlKey을 명시 적으로 설정합니다. OData 매개 변수를 보내려면 JavaScript에서 pageSizeUrlKeypageIndexUrlKey을 null로 설정해야합니다. 이벤트가 그리드의 작성 중에 발사되기 때문에, 당신은 그리드 MVC 구성하기 전에이 코드를 삽입해야

$(function() { 
     $("#grid1").on("iggriddatabinding", function (evt, ui) { 
      var features = ui.owner.options.features, i; 
      for (var i = 0; i < features.length; i++) { 
       if (features[i].name === "Paging") { 
        features[i].pageSizeUrlKey = null; 
        features[i].pageIndexUrlKey = null; 
       } 
      } 
     }); 
    }); 

그리드되기 전에 당신은 그것을 결합한다 : 페이지의 맨 아래에 다음 코드를 넣습니다 만들어진.

+0

답장을 보내 주셔서 다시 한 번 감사드립니다. 업데이트 된 코드를 사용하면 첫 번째 페이지로드시 그리드가 올바르게 렌더링되지만 그리드는 결과의 첫 페이지 만 보여주고 더 제공하지는 않으므로 $ inlinecount = allpages를 쿼리 문자열에 추가하지 않습니다. 이것은 제가 말할 수있는 유일한 문제입니다. –