MVC 2.0 - сортировка JqGrid с несколькими таблицами
Я нахожусь в процессе реализации jqGrid и хотел бы иметь возможность использовать функции сортировки. Я столкнулся с некоторыми проблемами с сортировкой столбцов, которые связаны с базовой таблицей.
Вот скрипт для загрузки сетки:
public JsonResult GetData(GridSettings grid)
{
try {
using (IWE dataContext = new IWE())
{
var query = dataContext.LKTYPE.Include("VWEPICORCATEGORY").AsQueryable();
////sorting
query = query.OrderBy<LKTYPE>(grid.SortColumn,
grid.SortOrder);
//count
var count = query.Count();
//paging
var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();
//converting in grid format
var result = new
{
total = (int)Math.Ceiling((double)count / grid.PageSize),
page = grid.PageIndex,
records = count,
rows = (from host in data
select new
{
TYPE_ID = host.TYPE_ID,
TYPE = host.TYPE,
CR_ACTIVE = host.CR_ACTIVE,
description = host.VWEPICORCATEGORY.description
}).ToArray()
};
return Json(result, JsonRequestBehavior.AllowGet);
}
}
catch (Exception ex)
{
//send the error email
ExceptionPolicy.HandleException(ex, "Exception Policy");
}
//have to return something if there is an issue
return Json("");
}
Как вы можете видеть, поле описания является частью связанной таблицы ("VWEPICORCATEGORY"), а заказ по указан на LKTYPE. Я пытаюсь выяснить, как именно происходит сортировка этого конкретного поля или, может быть, даже лучший способ реализовать эту сетку с использованием нескольких таблиц и ее функций сортировки.
Заранее спасибо, Билли
2 ответа
Вы сортируете неправильный запрос.
Измените свой код на:
var query = from host in dataContext.LKTYPE
select new
{
TYPE_ID = host.TYPE_ID,
TYPE = host.TYPE,
CR_ACTIVE = host.CR_ACTIVE,
description = host.VWEPICORCATEGORY.description
};
////sorting
query = query.OrderBy(grid.SortColumn,
grid.SortOrder);
//count
var count = query.Count();
//paging
var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();
//converting in grid format
var result = new
{
total = (int)Math.Ceiling((double)count / grid.PageSize),
page = grid.PageIndex,
records = count,
rows = data.ToArray()
};
Обратите внимание, что Include()
совершенно не нужно в вашем примере, так как вы проецируете.
У меня есть запись в моем блоге, которая показывает, как я свернул функциональность сортировки и разбиения по страницам jqGrid в очень многократно используемый шаблон с MVC.
Мое сообщение здесь: http://www.journeymandeveloper.com/Home/View/4fae1468-3e08-46e0-9208-9e7104d7956b/Server-side%20Paging%20and%20Sorting%20with%20jqGrid
Он содержит класс, который вы берете в качестве параметра в методе действия, и он делает всю работу за вас. Все, что вам действительно нужно сделать, это дать ему IQueryable, когда вы хотите результаты.