เนื่องจากตารางเคนโด้ของฉันใช้เวลาโหลดมากเกินไปหากข้อมูลมีมากกว่า 15,000 รายการ ฉันจึงคิดว่าจะใช้เพจจิ้งฝั่งเซิร์ฟเวอร์
ฉันไม่ได้ใช้กรอบงานเอนทิตี ฉันใช้ Kendo MVC wrapper และขั้นตอนการจัดเก็บของ SQL Server เพื่อดึงและแสดงข้อมูล
ฉันได้ส่งพารามิเตอร์สองตัวไปยัง Procedure เป็น @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