2014-02-06 2 views
6

나는 검도 그리드를 사용 중이며 서버에서 필터링, 정렬 및 페이징을 수행하려고합니다.kendo ui 그리드 필터, 정렬 및 서버 페이징

serverPaging: true, 
serverSorting: true 

그러나 나는 나 자신을 sortig 수행 할 경우 어떻게 내가 그리드 /는 sortig에 사용해야하는 URL입니다 인 dataSource 필터링 등 그리고 무엇을 알 수 있습니까 : 나는이 데이터 소스와 추가해야 이해? 나는 kendo가 제공하는 컨트롤을 사용하기를 원하지만 서버에 직접 가야한다. "prevntDefault"또는 이와 비슷한 것을 호출 할 수있는 "sortTriggered"와 같은 이벤트가 있습니까 ... 잘 모르겠습니다.

+0

어떤 서버 측 기술을 사용하고 있습니까? –

+0

관련성이 있는지 모르겠지만 wcf를 사용하고 있습니다. –

+0

관련성이 있습니다. 이제 보일러 코드 JS 코드없이 간단한 구성을 게시합니다. –

답변

3

이 샘플을 살펴보십시오. Windows Azure 용 MobileServices javascript API를 사용하고 있지만 서버 페이징을 처리하고 사용자가 직접 정렬하는 방법을 보여줍니다. 당신은 dataSource의 수송 기능에

http://jsbin.com/efeKiwO/11/edit

각 방법 (파괴 생성, 업데이트, 판독) (이것은 모든 정렬 및 페이징을 처리하는 판독 함수)의 함수로 구성 될 수있다.

read: function(options) { 
     // Get the table 
     var table = client.getTable("Customer"); 

     // Build base query 
     var query = table.includeTotalCount(); 

     // Add paging 
     if(options.data.skip !== undefined && options.data.take !== undefined) { 
      query = query.skip(options.data.skip).take(options.data.take); 
     } 

     // Add sorting 
     if(typeof options.data.sort !== "undefined" && options.data.sort !== null) { 
      for(var i = 0; i< options.data.sort.length; i++) { 
      if(options.data.sort[i].dir === "desc") { 
       query = query.orderByDescending(options.data.sort[i].field); 
      } 
      else { 
       query = query.orderBy(options.data.sort[i].field); 
       } 
      } 
     } 

     var promise = query.read(); 

     promise.done(function(data) { 
      options.success(data); 
     }); 
     }, 

원하는 기능을 수행 할 수 있습니다. 이 샘플과 같은 자바 스크립트 라이브러리를 사용하는 대신 $ .getJSON 호출 또는 $ .ajax 호출을 수행 할 수 있습니다. 함수에 대한 매개 변수 객체에는 페이징, 정렬 및 필터링에 필요한 모든 것이 포함됩니다. 일단 데이터가 있으면 options.success (dataSet)를 호출하십시오. 올바르게 정렬/페이징 된 데이터 세트를 사용하면 그리드가 바인딩됩니다.

+0

그게 정확히 내가 뭘하려고했는데, "serverSorting"을 데이터 소스에 추가 할 때 어떤 이유로 정렬이 작동하지 않고 읽기 기능이 호출되지 않습니다. –

+0

클라이언트 측에서 처리하는 경우 ServerSorting이 필요하지 않습니다. –

+0

"serverSorting"을 제거하면 read 함수가 확실히 호출되지 않습니다. 어쨌든, 나는 문제를 해결했다. 고마워요. –

0

켄도 그리드는 하나의 URL 만 사용하여 데이터를 검색하며 DataSource 개체에서 가져옵니다.

이 URL은 데이터가 필요할 때마다 그리드에 의해 호출되며 정렬 및 페이징 매개 변수는 그리드 컨텍스트에서 서버 기반에 대한 각 요청에 추가됩니다.

그러면 서버에서 사용자의 요청을 빌드하는 데 필요한 모든 매개 변수와 함께 표준 웹 요청을 받게됩니다. 그런 다음 응답 형식으로 올바르게 형식화해야합니다 (예 : JSONP OData).

+0

그래서 원하는 URL을 가질 수 없습니까? 특수 URL을 사용하면 사용할 수 없습니까? –

+0

당신은 당신이 원하는 정렬/페이지를 기반으로 다른 URL을 가지고 있다는 것을 의미합니까? –

+0

다른 URL, 다른 인수 ... –

3

구성이 거의 다되었습니다.

MVC에 연결하기위한 비밀 소스가 없습니다.

UsersController.cs (예)에 서버 측에
var myDataSource = new kendo.data.DataSource({ 
    transport: { 
     read: { 
      url: 'Users/Read', 
      type: 'POST' 
     } 
    }, 
    serverSorting: true, 
    serverFiltering: true, 
    serverPaging: true 
} 

, 당신은 [DataSourceRequest]

public DataSourceResult Read([DataSourceRequest] DataSourceRequest request) 
{ 
    // Here you might actually get the items from your cache or database. 
    var List<User> myList = new List<User>();   

    // Here is when the kendo magic happens. 
    return myList.ToDataSourceResult(request); 
} 

왜 [DataSourceRequest를받을 수 있습니다

은 데이터 소스의 구성은 다음과 같이 가정하자 ] 중요하다?

그리드가 서버에 요청하는 페이징, 정렬, 필터링 매개 변수가 포함되어 있기 때문입니다. 따라서 알고리즘을 직접 수행하려면 요청을 검토하고 해당 paramers를 처리해야합니다. DataSourceResult 객체 인스턴스를 반환하는 것을 기억하십시오.

개체가 캐시에 있고 필터링, 그룹화, 정렬 등의 작업을 위해 필드가 필요하지 않은 경우 kendo C# 확장 ToDataSourceResult를 사용하면됩니다. 항목을 처리하고 동적 LINQ 문을 사용하여 필터링, 정렬, 페이징 구성을 적용합니다.

+0

엔티티 프레임 워크 또는 서버 측의 다른 IQueryable 결과를 가정하면 .ToDataSourceResult가 어떻게 작동합니까? SQL Server가 무거운 작업을 수행하는 대신 메모리에서 페이징/정렬 작업을 수행한다는 것을 이해하면 ... –

+0

글쎄, 그게 검도 녀석에게 질문 할 질문이 더 많습니다. 나는 그들의 C# 코드를 약간 살펴 봤는데 네, 필요한 모든 변환을 만들기 위해 LINQ를 사용하고 있습니다. 그래서 실제로 IEnumerable을 백업하는 것에 달려 있습니다. 따라서 DB가 결국 무거워 질 가능성이 있습니다. 검도로 전달하기 전에 쿼리를 메모리 내 개체로 구체화하지 마십시오. 포기 : 우리는 더 이상 그 프레임 워크에 의존하지 않기 때문에 우리 회사의 최신 검도 버전을 사용하기위한 라이센스를 구입하지 않았기 때문에 서버 측 검도에 대한 나의 지식은 시대에 뒤 떨어진 것일 수 있습니다. –

관련 문제