검도 그리드 재 장전 / 갱신


171

Javascript를 사용하여 Kendo Grid를 다시로드하거나 새로 고치는 방법은 무엇입니까?

언젠가 또는 사용자 조치 후 그리드를 다시로드하거나 새로 고쳐야하는 경우가 종종 있습니다.

답변:


314

당신이 사용할 수있는

$('#GridName').data('kendoGrid').dataSource.read(); <!--  first reload data source -->

$('#GridName').data('kendoGrid').refresh(); <!--  refresh current UI -->

19
@zespri read는 서버를 요청하고 데이터 소스를 다시로드 합니다 . UI에는 변경 사항이 없습니다. refresh현재 데이터 소스에서 그리드로 항목을 다시 렌더링합니다. 그래서 두 가지가 모두 필요합니다.
Botis

37
최신 버전의 검도에서 새로 고침이 필요하다고 생각하지 않습니다. 그것없이 잘 작동하는 것 같습니다
GraemeMiller

2
네! 이 작업은 TreeList에서도 가능합니다. $ ( '# Gantt'). data ( 'kendoTreeList'). dataSource.read (); $ ( '# Gantt'). data ( 'kendoTreeList'). refresh ();
Hernaldo Gonzalez

27
Telerik.com/forums/show-progress-spinner-during-load-refresh를 읽은 후 개발자는 명시 적으로 새로 고침을 호출하지 않습니다 . 진행률 표시기가 나타나지 않을 수 있기 때문입니다.
Rustam Miftakhutdinov

2
최신 버전을 사용하고 있으며 .read 만 호출하면됩니다. 읽은 후 .refresh를 호출하면 데이터를 위해 서버로 두 번 트립됩니다.
Justin

59

나는 결코 상쾌하지 않습니다.

$('#GridName').data('kendoGrid').dataSource.read();

홀로 항상 나를 위해 일합니다.


31
$('#GridName').data('kendoGrid').dataSource.read();
$('#GridName').data('kendoGrid').refresh();

감사합니다. 그러나 "TypeError : $ (...). data (...) is undefined"오류가 발생합니다. 또한 많은 페이지를 살펴 보고이 솔루션의 다른 변형을 시도했지만 여전히 동일한 오류가 발생합니다. 어떤 생각?
Jack

data ( 'kendoGrid')가 null을 반환하면 id가 잘못되었거나 그리드를 아직 만들지 않은 것입니다. NB 당신은 $ (..). kendoGrid ()로 그리드를 만들고 나중에 $ (). data ( 'kendoGrid')
tony

29

최근 프로젝트에서 일부 드롭 다운 선택에서 발생하는 일부 호출을 기반으로 Kendo UI Grid를 업데이트해야했습니다. 다음은 내가 사용했던 것입니다.

$.ajax({
        url: '/api/....',
        data: { myIDSArray: javascriptArrayOfIDs },
        traditional: true,
        success: function(result) {
            searchResults = result;
        }
    }).done(function() {
        var dataSource = new kendo.data.DataSource({ data: searchResults });
        var grid = $('#myKendoGrid').data("kendoGrid");
        dataSource.read();
        grid.setDataSource(dataSource);
    });

잘하면 이것은 당신에게 시간을 절약 할 것입니다.


정확히 내가 찾던 것 grid.setDataSource (dataSource); 비 원격 통화의 경우 사용해야합니다. 감사!
Rui Lima

15

이러한 답변 중 하나만이 read약속 을 반환 한다는 사실을 얻지 못하므로 새로 고침을 호출하기 전에 데이터가로드 될 때까지 기다릴 수 있습니다.

$('#GridId').data('kendoGrid').dataSource.read().then(function() {
    $('#GridId').data('kendoGrid').refresh();
});

데이터 수집이 인스턴트 / 동기화 인 경우에는 필요하지 않지만 즉시 리턴되지 않는 엔드 포인트에서 발생하는 것보다 더 많습니다.


1
내장 된 약속 지원을 활용하면 실제로 편리하며 몇 줄의 코드도 제거됩니다. 나는 이것이 진정한 답이되어야한다고 생각했다.
FoxDeploy 2018 년

1
Zachary 감사합니다! 나는이 문제에 대해 두 시간을 보냈습니다. 귀하의 솔루션은 나를 위해 일한 유일한 것입니다. 루프를 통해 한 번에 한 행씩 ajax를 통해 그리드 데이터베이스 소스에 행을 삽입하고 있습니다. 루프가 완료된 후 dataSource.read ()는 가끔 만 작동했습니다. "그럼"은 내가 필요한 것입니다. 매우 감사!
Antony D

9

핸들러에서 그리드에 대한 참조를 원하지 않으면이 코드를 사용할 수 있습니다.

 $(".k-pager-refresh").trigger('click');

새로 고침 버튼이 있으면 그리드를 새로 고칩니다. 버튼은 다음과 같이 활성화 할 수 있습니다.

[MVC GRID DECLARATION].Pageable(p=> p.Refresh(true))

9

실제로는 다릅니다.

  • $('#GridName').data('kendoGrid').dataSource.read()uid테이블 행 의 속성을 새로 고칩니다.

  • $('#GridName').data('kendoGrid').refresh() 같은 uid를 떠난다


8

해야 할 일은 kendoGrid 바인딩 코드에 이벤트 .Events (events => events.Sync ( "KendoGridRefresh")) 를 추가하는 것입니다 .Ajax 결과에 새로 고침 코드를 작성할 필요가 없습니다.

@(Html.Kendo().Grid<Models.DocumentDetail>().Name("document")
    .DataSource(dataSource => dataSource
    .Ajax()
    .PageSize(20)
    .Model(model => model.Id(m => m.Id))        
    .Events(events => events.Sync("KendoGridRefresh"))    
    )
      .Columns(columns =>
      {
          columns.Bound(c => c.Id).Hidden();              
          columns.Bound(c => c.UserName).Title(@Resources.Resource.lblAddedBy);                           
      }).Events(e => e.DataBound("onRowBound"))
          .ToolBar(toolbar => toolbar.Create().Text(@Resources.Resource.lblNewDocument))
          .Sortable()          
          .HtmlAttributes(new { style = "height:260px" })          
  )

그리고 .js 파일에 다음과 같은 전역 함수를 추가 할 수 있습니다. 따라서 프로젝트의 모든 검도 그리드에 대해 호출하여 kendoGrid를 새로 고칠 수 있습니다.

function KendoGridRefresh() {
    var grid = $('#document').data('kendoGrid');
    grid.dataSource.read();
}

Event를 추가하여 kendoGrid를 새로 고칩니다.
밀라노

8

내 경우에는 매번 갈 사용자 정의 URL이 있었다. 결과의 스키마는 동일하게 유지됩니다.
나는 다음을 사용했다.

var searchResults = null;
$.ajax({
        url: http://myhost/context/resource,
        dataType: "json",
        success: function (result, textStatus, jqXHR) {
            //massage results and store in searchResults
            searchResults = massageData(result);
        }
    }).done(function() {
        //Kendo grid stuff
        var dataSource = new kendo.data.DataSource({ data: searchResults });
        var grid = $('#doc-list-grid').data('kendoGrid');
        dataSource.read();
        grid.setDataSource(dataSource);
    });


5

다음 코드를 사용하여 그리드의 읽기 메소드를 자동으로 호출하고 그리드를 다시 채 웁니다.

$('#GridName').data('kendoGrid').dataSource.read();

5

그리드를 다시로드하는 다른 방법은

$("#GridName").getKendoGrid().dataSource.read();

5

당신은 항상 사용할 수 있습니다 $('#GridName').data('kendoGrid').dataSource.read();. .refresh();그 후에는 실제로 할 필요가 없으며 .dataSource.read();트릭을 수행합니다.

이제 그리드를 더 각도 방식으로 새로 고치려면 다음을 수행하십시오.

<div kendo-grid="vm.grid" id="grid" options="vm.gridOptions"></div>

vm.grid.dataSource.read();`

또는

vm.gridOptions.dataSource.read();

그리고 데이터 소스를 kendo.data.DataSource유형 으로 선언하는 것을 잊지 마십시오


5

Jquery .ajax를 사용하여 데이터를 얻었습니다. 데이터를 현재 그리드로 다시로드하려면 다음을 수행해야합니다.

.success (function (result){
    $("#grid").data("kendoGrid").dataSource.data(result.data);
})

4

그리드를 새로 고칠 때 1 페이지로 돌아가고 싶습니다. read () 함수를 호출하면 새 결과에 많은 페이지가 없어도 현재 페이지를 유지합니다. 데이터 소스에서 .page (1)을 호출하면 데이터 소스가 새로 고쳐지고 1 페이지로 돌아가지만 페이징 할 수없는 그리드에서는 실패합니다. 이 함수는 다음을 모두 처리합니다.

function refreshGrid(selector) {
     var grid = $(selector);
     if (grid.length === 0)
         return;

     grid = grid.data('kendoGrid');
     if (grid.getOptions().pageable) {
         grid.dataSource.page(1);
     }
     else {
         grid.dataSource.read();
     }
}

4

그리드를 새로운 읽기 요청과 함께 다시 렌더링하는 완전한 새로 고침을 수행하려면 다음을 수행하십시오.

 Grid.setOptions({
      property: true/false
    });

속성은 임의의 속성이 될 수 있습니다 (예 : 정렬 가능)


3

아래 코드를 작성하십시오

$('.k-i-refresh').click();

1
이것은 pageable.refresh = true ...로 그리드를 초기화 한 경우에만 적용되며 기본적으로는 그렇지 않습니다. 어쨌든 API 함수를 사용하여 UI 해결 방법을 사용할 수있을 때 UI 해결 방법을 사용하지 않아야합니다 (허용 된 답변 참조)
The_Black_Smurf


3

시도해 볼 수 있습니다 :

    $('#GridName').data('kendoGrid').dataSource.read();
$('#GridName').data('kendoGrid').refresh();

3

그리드가 시간 단위로 자동 새로 고쳐 지길 원하는 경우 간격이 30 초로 설정된 다음 예를 사용할 수 있습니다.

   <script type="text/javascript" language="javascript">
      $(document).ready(function () {
         setInterval(function () {
            var grid = $("#GridName").data("kendoGrid");
            grid.dataSource.read();
         }, 30000);
      });
   </script>

2

위젯의 기본 / 업데이트 된 구성 / 데이터는 연관된 데이터 소스에 자동으로 바인딩되도록 설정됩니다.

$('#GridId').data('kendoGrid').dataSource.read();
$('#GridId').data('kendoGrid').refresh();

답변이 너무 비슷해 보이기 때문에 (2013 년부터) 정답에 문제가 있었습니까? 당신은 적어도 어떤 식 으로든 그 말을해야합니다. 그리고 그 대답의 말은 당신이 전화해서는 안된다고 말합니다refresh
James Z

2

읽기 작업에 새 매개 변수를 보내고 원하는 페이지를 설정하여 그리드를 새로 고칠 수도 있습니다.

var ds = $("#gridName").data("kendoGrid").dataSource;
ds.options.page = 1;
var parameters = {
    id: 1
    name: 'test'
}
ds.read(parameters);

이 예제에서 그리드의 읽기 작업은 2 개의 매개 변수 값으로 호출되며 결과를 얻은 후 그리드의 페이징은 1 페이지에 있습니다.


1

새로 고침하는 가장 쉬운 방법은 refresh () 함수를 사용하는 것입니다. 다음과 같습니다.

$('#gridName').data('kendoGrid').refresh();

이 명령을 사용하여 데이터 소스를 새로 고칠 수도 있습니다.

$('#gridName').data('kendoGrid').dataSource.read();

후자는 실제로 그리드의 데이터 소스를 다시로드합니다. 필요와 요구 사항에 따라 두 가지를 모두 사용할 수 있습니다.


-2
$("#grd").data("kendoGrid").dataSource.read();

이것은 최소한 1to1 복사 붙여 넣기는 아니지만 추가 정보를 제공하지 않습니다. 이 게시물의 거의 모든 답은 하나 이상의 공감대 사용을 권장합니다dataSource.read()
Fabian N.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.