MVC 2.0 - сортировка JqGrid с несколькими таблицами - PullRequest
0 голосов
/ 31 января 2011

Я нахожусь в процессе реализации 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 ]

1 голос
/ 31 января 2011

Вы сортируете неправильный запрос.

Измените свой код на:

        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() совершенно не требуется в вашем примере, поскольку вы проецируете.

1 голос
/ 31 января 2011

У меня есть запись в моем блоге, в которой показано, как я свернул функциональность сортировки и разбиения по страницам jqGrid в очень многократно используемый шаблон с MVC.

Мой пост здесь: http://www.journeymandeveloper.com/Home/View/4fae1468-3e08-46e0-9208-9e7104d7956b/Server-side%20Paging%20and%20Sorting%20with%20jqGrid

содержит класс, который вы берете в качестве параметра метода действия, и он делает всю работу за вас.Все, что вам действительно нужно, это дать IQueryable, когда вы хотите получить результаты.

...