2015-01-30 2 views
1

я пытался это исправить, то, что я хочу сделать, это:Кендо Сетка C# - Выберите текущую страницу без обновления источника данных снова

У меня есть источник данных, который получает данные с сервера, когда я иду на сервер, я получить список элементов, затем я должен искать элемент, который я должен выбрать (этот элемент может быть на любой странице), после того, как у меня есть элемент и страница, на которой находится элемент (при условии, что каждая страница имеет 30 элементов), затем Я вызываю выражение LINQ, чтобы пропустить требуемый объем данных и принять 30. Наконец, я возвращаю этот список на стороне клиента.

Когда данные поступают на клиент, мне нужно «автоматически выбрать» выбранный элемент и изменить страницу, чтобы найти пользователя на правой странице, где находится выбранный элемент. У меня новая страница, пропустить, выбранное значение и все на стороне клиента снова.

Что вы предлагаете мне изменить страницу в источник данных kendo grid без вызова нового обновления и снова перейти на сервер?

Это как источник данных выглядит следующим образом:

return new kendo.data.DataSource({ 
     serverPaging: true, 
     transport: { 
      read: { 
       url: URLController.Current().getURL('MyURL'), 
       contentType: 'application/json', 
       accepts: 'application/json', 
       type: 'POST' 
      }, 
      parameterMap: function(data, type) { 
       if (data) { 
        return JSON.stringify(
        { 
         data: jsonData, 
         pageSize: data.pageSize, 
         skip: data.skip, 
         take: data.take 
        }); 
       } 
      } 
     }, 
     schema: { 
      data: function (data) { 
       var dropDownData = JSON.parse(data); 
       gridElement.attr('data-model', JSON.stringify({ data: data })); 

       return dropDownData.Data; 
      }, 
      total: function (data) { 
       var dropDownData = JSON.parse(data); 
       return dropDownData.total; 
      }, 
      model: { 
       id: 'ID' 
      } 
     }, 
     pageable: true, 
     pageSize: 30, 
     error: function(e) { 
      alert('Error ' + e); 
     } 
    }); 

Когда данные сетки ограничена я должен изменить страницу номер текущей страницы, а затем выберите текущий элемент.

grid.one('dataBound', function (e) { 
      var currentGridElement = this.element; 
      var currentModel = currentGridElement.attr('data-model'); 
      var currentJsonData = parseDropDownDataJSONString(currentModel).data; 
      var gridDataSource = this.dataSource; 
      var selection = gridDataSource.get(currentJsonData.selectedValue); 
      if (selection != undefined) { 
       var row = currentGridElement.find('tbody>tr[data-uid=' + selection.uid + ']'); 
       if (row != undefined) { 
        currentGridElement.attr('data-closeByChange', false); 
        gridDataSource.page(currentJsonData.pageNumber); 
        this.select(row); 
        dexonDropDownGrid.combobox().text(selection.DISPLAY); 
       } 
      } 
      var aaaa = 0; 
     }); 

Это как мой слушатель событий с привязкой к данным выглядит, когда я пытаюсь установить страницу снова вызывает сервер и я получил больше задержки, чтобы загрузить нужные данные.

Есть ли способ решить это?

Thanks

ответ

0

И та же проблема.

Существует, как это исправить (не самое лучшее решение, когда-либо, но он работает):

var forcedPageChange = false; 
var cachedResult; 

var dataSource = new kendo.data.DataSource({ 
    transport: { 
     read: function (options) { 
      if (forcedPageChange) { // prevent data request after manual page change 
       forcedPageChange = false; 
       options.success(cachedResult); 
       cachedResult = null; 
       return; 
      } 

      gridDataProvider.getData() // promise of data 
        .then(function (result) { 
         // check if current page number was changed 
         if ($scope.gridConfig.dataSource.page() !== result.pageNumber || 
           $scope.gridConfig.dataSource.pageSize() !== result.rowsPerPage) { 
          cachedResult = _.clone(result); 
          forcedPageChange = true; 
          options.page = result.pageNumber; 
          options.pageSize = result.rowsPerPage; 
          $scope.gridConfig.dataSource.query(options); 
         } 

         options.success(result); 
        }, function() { 
         options.error(); 
        }); 
     } 
    }, 
    schema: { 
     data: function (response) { 
      return response.items; 
     }, 
     total: function (response) { 
      return response.totalCount; 
     } 
    }, 
    //... 
    serverPaging: true, 
    serverSorting: true, 
    serverFiltering: true 
}); 

Я обнаружил, что dataSource.page(newPageNumber) не работает в этой ситуации. Просто снимите номер страницы до 1.

Это решение работает, но у меня все еще есть ошибка с отсутствующим значком сортировки после dataSource.query(options) ...

Смежные вопросы