Обновление диапазона + Частичное обновление + Kendo Datasource + Kendo Grid + WebSync

Мы внедряем веб-сайт с использованием следующих технологий.

Клиент: Html5, KendoUI, WebSync (публикация, подписчик)

Сервер: ASP.net MVC 3.0

Сетка имеет определенные операции для каждой строки. Например, нам нужно обновить статус каждой строки, щелкнув рабочее меню после установки флажков в определенных строках.

Когда мы делаем эту операцию в меню, мы отправляем ajax-запрос в MVC Controller для обновления записи в базе данных, и он просто возвращает true клиенту. Здесь мы использовали модель издателя-подписчика WebSync для фактического уведомления клиента о завершении этого запроса, потому что эти операции нужно когда-нибудь обрабатывать.

Когда мы получаем обратный вызов из Web Sync, мы обновляем таблицу данных кендо следующим образом.

onMoveActionMessageReceived = function (data) {

     $("#resultGrid").data("kendoGrid").dataSource.read();
     WebSyncClient.UnsubscribeToMoveTransactionActions($('#moveTransactionIdTxt').val());
 }

Поскольку у нас есть более 400 тыс. Записей в базе данных для данных сетки и мы используем разбиение на страницы, это решение занимает много времени и влияет на пользовательский опыт.

Есть ли способ обновить источник данных кендо с помощью заданных элементов данных (т. Е. Не всего источника данных).(Обновление диапазона сетки)? или есть другие решения?

1 ответ

Решение

Я нашел решение для обновления диапазона в Kendo + WebSync. После завершения процесса на сервере webSync уведомляет функцию refreshSearchData, которая отвечает за обновление источника данных клиента. Функция getSearchResultViewItem возвращает элемент данных из базы данных, и я обновил источник данных со стороны клиента.

 refreshSearchData = function (entityId, entityType) {

    getSearchResultViewItem(entityId, entityType, function (data) {

        var kendoGrid = $("#resultGrid").data("kendoGrid");

        if (kendoGrid) {
            if ($('#SelectedTypeId')[0].value == entityType) {
               var items = kendoGrid.dataSource.data().toJSON();

                for (var i = 0; i < items.length; i++) {
                    if (items[i].Id == data.Id) {
                        items[i] = data;
                        break;
                    }
                }
                kendoGrid.dataSource.data(items);
            }
        }
    });

};

getSearchResultViewItem = function (entityId, entityType, callback) {
    $.get(baseUrl + 'Search/GetSearchViewDtoById', { id: entityId, searchTypeId: entityId }, function (data) {
        callback(data);
    });
};
Другие вопросы по тегам