2014-05-15 3 views
2

Telerik MVC Grid 컨트롤의 상태 저장 /로드 중 일부 문제가 있습니다.로드 Telerik MVC 모눈 상태

나는 Kendo 그리드를 사용하여 많은 예제를 찾고 있지만 Telerik MVC Grid에서 시스템을 Kendo로 변경할 수있는 리소스 나 리소스가 없습니다.

나는 & 부하 아래 코드와 쿠키를 사용하여 그리드의 현재 상태를 저장 할 수있어 :

function setState() { 
    var pricingGrid = $("#PricingGrid").data("tGrid"); 
    var dataSource = pricingGrid.dataSource; 
    var state = JSON.stringify({ 
     page: pricingGrid.page, 
     pageSize: pricingGrid.pageSize, 
     sort: pricingGrid.orderBy, 
     group: pricingGrid.groupBy, 
     filter: pricingGrid.filterBy 
    }); 

    $.cookie("pricingGridState", state); 
} 


function loadState() { 
    var grid = $("#PricingGrid").data("tGrid"); 
    var state = JSON.parse($.cookie("pricingGridState")); 
    if (state) 
    { 
     grid.sort(state.sort); 
     grid.pageTo(state.page); 
     grid.filter(state.filter); 
    } 
} 

이 코드는 트릭을 할 것 같다,하지만 각 방법에 대한 리 바인드 호출을 발사 (정렬, pageTo 및 필터). 페이지에 여러 개의 그리드 상태를 저장하려고 계획하고 있으며 페이지로드시 각 페이지를 3 번 ​​리 바인드하지 않을 것입니다.

검도에서 'grid.dataSource.query'메서드를 사용할 수있는 것처럼 보이지만 Telerik MVC에서 작동하는 것과 같은 것을 얻을 수없는 것 같습니다.

도움을 주시면 감사하겠습니다.

참고 : 상태 개체를 grid.dataSource 속성에서 저장해 봤지만 그리드 상태를 전혀로드하지 않는 것 같습니다.

답변

1

약간의 연구 끝에 나에게 도움이되는 해결책을 찾을 수있었습니다.

//Prevent auto binding of grid and load state from cookie 
var gridsToBind = [];  
function CommonGrid_onDataBinding(e) { 
    if ($.inArray(e.target.id, gridsToBind) == -1) { 
     e.preventDefault(); 
     gridsToBind.push(e.target.id); 
     LoadGridState(); 
    } 
}  
function LoadGridState() { 
    var grid = $("#CommonGrid").data('tGrid'); 
    var state = $.cookie("gridState"); 
    if (state) { 
     state = JSON.parse(state); 
     grid.currentPage = state.currentPage; 
     grid.orderBy = state.orderBy; 
     grid.filterBy = state.filterBy; 
     grid.pageSize = state.pageSize; 
     for (var i in state.filteredCols) { 
      if (state.filteredCols.hasOwnProperty(i)) { 
       grid.columns[i].filters = state.filteredCols[i].filters; 
       $("a[href*='=" + grid.columns[i].member + "-'").siblings(".t-grid-filter").addClass("t-active-filter"); 
      } 
     } 
     $("#CommonGrid").data('tGrid', grid); 
    } 
    grid.ajaxRequest();   
} 

//Logic to save state of grid in cookie 
function CommonGrid_OnDataBound(e) { 
    var filteredCols = {}; 
    $.each(grid.columns, function (i, n) { 
     if (!!n.filters) { 
      filteredCols[i] = n; 
     } 
    }); 
    var state = JSON.stringify({ 
     currentPage: grid.currentPage, 
     orderBy: grid.orderBy, 
     filterBy: grid.filterBy, 
     pageSize: grid.pageSize, 
     filteredCols: filteredCols 
    }); 
    $.cookie("gridState", state); 
} 
0

내가 이전 예제 산지 브 라이를 적용 : Telerik 그리드에서 사용할 때 댓글한다 function LoadGridState()

.DataBinding(o => 
    { 
     o.Ajax().Select(ajaxSelectActionName, controllerName); 
    }) 

I이 경우 마지막 행 grid.ajaxRequest(); 작업을 일부 조정이 필요 여기에 내가 무슨 짓을 재귀를 피하기 위해서. 그렇지 않으면 솔루션은 매우 우아합니다. 감사합니다.