C# MVC2 Jqgrid – как правильно выполнять подкачку на стороне сервера?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 C# MVC2 Jqgrid – как правильно выполнять подкачку на стороне сервера?

Сообщение Anonymous »

У меня есть jqgrid, в котором таблица базы данных содержит несколько тысяч строк, но jqrid отображает только 15 строк за раз.

Он должен отображаться очень быстро (запрос 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
И серверная часть (действие MVC2) делает это:

Код: Выделить всё

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);
И, наконец, метод расширения model.ToGridData делает следующее:

Код: Выделить всё

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...
Единственное отличие, которое я вижу сейчас от примера Олега, заключается в том, что его getAll возвращает IQueryable, а мой — просто List.

Подробнее здесь: https://stackoverflow.com/questions/418 ... ide-paging
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как динамически выполнять подкачку на стороне клиента в DevExpress GridView с использованием List DataSoure?
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Попытка сортировки jqGrid локально по-прежнему вызывает функцию сортировки на стороне сервера.
    Anonymous » » в форуме Jquery
    0 Ответы
    125 Просмотры
    Последнее сообщение Anonymous
  • Подсчет страниц в jqgrid с подкачкой на стороне сервера
    Anonymous » » в форуме Jquery
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Пейджинг jqgrid на стороне сервера
    Anonymous » » в форуме Jquery
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Aspnet_compiler ищет поставщика кода jsharp в приложении C# mvc2
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»