Он должен отображаться очень быстро (запрос 15 строк не займет много времени). Но вместо этого это занимает 10–20 секунд, что означает, что каждый раз извлекается вся таблица.
Сетка определяется следующим образом:
Код: Выделить всё
$("#Products").jqGrid({
url: url, mtype: "get", datatype: "json", jsonReader: {
root: "Rows", page: "Page", total: "Total", records: "Records", repeatitems: false,
userdata: "UserData",id: "Id"},
colNames: ["Product Id","Product Code", ... etc ],
colModel: [{ name: "Id", ... etc}],
viewrecords: true, height: 400, width: 800, pager: $("#jqgPager"),
rowNum: 15, rowList: [50, 100, 200],
autowidth: true, multiselect: false
Код: Выделить всё
var model = (from p in products
select new
{
p.Id, p.ProductCode, p.ProductDescription,
AllocatedQty = p.WarehouseProducts.Sum(wp => wp.AllocatedQuantity),
QtyOnHand = p.WarehouseProducts.Sum(wp => wp.OnHandQuantity)
}).AsQueryable();
JsonResult json = Json(model.ToGridData(
page, rows, orderBy, "",
new[] { "Id", "ProductCode", "ProductDescription", "AllocatedQty", "QtyOnHand" }),
JsonRequestBehavior.AllowGet);
Код: Выделить всё
var data =_service.GetAll();
var page = data.Skip((index) * pageSize).Take(pageSize);
list.Add(page.AsEnumerable);
- Я неправильно установил параметры разбиения на страницы jqgrid?
- Я написал плохой Linq, который независимо вытягивает все строки?
Например, вызывает ли Sum() чтение всех строк? - Неправильно ли я выполнил .Skip().Take()?
- Я пропустил что-то еще?
Когда сравнивая мой код с примером, опубликованным Олегом, я вижу, что делаю все в следующем порядке:
- getAll
- выбрать поля модели
- страница
- getAll
- страница
- выбрать модель поля
Код: Выделить всё
public ActionResult GetProductList(int page, int rows, string sidx, string sord,
string searchOper, string searchField, string searchString)
{
List
products = _productService.GetAllProducts();
int totalRecords = products.Count();
var pagedData = products.Skip((page > 0 ? page - 1 : 0) * rows).Take(rows);
var model = (from p in pagedData
select new
{
p.Id, p.ProductCode, p.ProductDescription,
Barcode = string.Empty, UnitOfMeasure = string.Empty,
p.PackSize, AllocatedQty = string.Empty,
QtyOnHand = string.Empty }).ToList();
var jsonData = new
{
total = page, records = totalRecords,
page = (totalRecords + rows - 1) / rows, rows = model
};
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
Код: Выделить всё
A circular reference was detected while serializing an object of type
'System.Data.Entity.DynamicProxies.Product_FA935D3899E2...
Подробнее здесь: https://stackoverflow.com/questions/418 ... ide-paging