Обновление диапазона + Частичное обновление + 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);
});
};