Поскольку моя сетка кендо загружается слишком долго, если данные составляют более 15000 записей, я думаю о реализации пейджинга на стороне сервера.
Я не использую структуру сущности. Я использую оболочку Kendo MVC и хранимые процедуры SQL Server для извлечения и отображения данных.
Я передал процедуре два параметра как @Skip и @Take.
Ниже приведен мой код:
Просмотреть
@(Html.Kendo().Grid(Model)
.Name("expandedView_" + Model.ToArray()[0].WidgetId.ToString())
.Columns(columns =>
{
columns.Bound(p => p.FacilityNameAbbreviation).Title(@Resource.FacilityName).Width("15%");
columns.Bound(p => p.DeviceAbbreviation).Title(@Resource.DeviceName).Width("10%");
columns.Bound(p => p.EventType).Title(@Resource.EventType).Width("40%");
columns.Bound(p => p.SubEventCode).Title(@Resource.SubAlarmCode).Width("10%").HtmlAttributes(new { style = "text-align:right" });
columns.Bound(p => p.FacilityEventTime).Title(@Resource.EventTime).Width("15%");
columns.Bound(p => p.EventStatus).Title(@Resource.Status).Width("10%");
columns.Bound(p => p.PriorityColor).Hidden(true);
})
.Scrollable()
.Pageable()
.DataSource(dt => dt
.Ajax()
.PageSize(100)
.Read(read => read.Action("PageWiseData", "DeviceEvent", new { WidgetId = Model.ToArray()[0].WidgetId, FacilityIds = ViewData["Facids"].ToString() }))
.ServerOperation(true)
.Model(model => model.Id(p => p.FacilityEventTime)))
)
Действия:
[HandleError(ExceptionType = typeof(Exception), View = "ApplicationError")]
public PartialViewResult DeviceEventExpandedView(int WidgetId, string FacilityIds)
{
var userDetail = sessionContext.UserContextBag;
int Skip = 0; // for first page data static value is passed
int Take = 100;
IList<AMI.WebRole.Models.Widgets.DeviceEventModel> result = _deviceEventClient.DeviceEventsForExpandedView(WidgetId, FacilityIds, TenantId, CustomerId, UserId, this.sessionContext.UserContextBag.CultureName, Skip, Take);
return PartialView(result);
}
public ActionResult PageWiseData(int WidgetId, string FacilityIds, [DataSourceRequest]DataSourceRequest request)
{
IList<AMI.WebRole.Models.Widgets.DeviceEventModel> Totalresult = null;
var Skip = (request.Page - 1) * request.PageSize;
var Take = request.PageSize;
Totalresult = _deviceEventClient.DeviceEventsForExpandedView(WidgetId, FacilityIds, TenantId, CustomerId, UserId, this.sessionContext.UserContextBag.CultureName, Skip, Take);
return Json(new
{
Data = Totalresult,
Total = 1500
});
}
ПРОБЛЕМА:
В первый раз вызывается «DeviceEventExpandedView», представление загружается и данные отображаются успешно, НО НОМЕР СТРАНИЦЫ ПОКАЗЫВАЕТСЯ КАК 1 ТОЛЬКО в первый раз. В моей сетке также есть фильтры, как только я нажимаю на фильтр, метод «PageWiseData» вызывается снова, он извлекает 100 записей, и на этот раз показывает номер страницы для последующих страниц. Насколько я понимаю, во второй раз возвращаемые данные находятся в формате JSON, который также включает Total = 1500, но в первом случае, когда загружается частичное представление, этот счетчик «Total» не установлен.
Я не могу показать номера страниц (в моем случае должно быть до 15), когда частичное представление загружено и сетка привязана в первый раз
МОЖЕТ КТО-НИБУДЬ ПОМОЧЬ ЗДЕСЬ, КАК ПРОЙТИ СЧЕТ В ПЕРВЫЙ РАЗ или КАК ПРИВЯЗАТЬ СЕТКУ С МЕТОДОМ "PageWiseData" В ПЕРВЫЙ РАЗ.... ИЛИ любой другой способ сделать это... пожалуйста, помогите!!
Action
делает это неправильно, позвольте Кендо отфильтровать ваш результат, как объяснил @hutchonoid. - person Rosdi Kasim   schedule 10.07.2015.ToDataSourceResult(request)
применит к запросу собственный фильтр и разбиение на страницы, поэтому будут получены только необходимые записи. - person Rosdi Kasim   schedule 10.07.2015