0

我正在实施 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”),并且 order by 以 LKTYPE 为目标。我试图弄清楚如何准确地对特定字段进行排序,或者甚至可能是使用多个表和排序功能来实现此网格的更好方法。

在此先感谢,比利

4

2 回答 2

1

我的博客上有一篇文章,展示了我如何将 jqGrid 的排序和分页功能转变为一个非常可重用的 MVC 模式。

我的帖子在这里: http ://www.journeymandeveloper.com/Home/View/4fae1468-3e08-46e0-9208-9e7104d7956b/Server-side%20Paging%20and%20Sorting%20with%20jqGrid

它包含一个类,您可以将其作为 action 方法的参数,它会为您完成所有工作。您真正需要做的就是在需要结果时给它一个 IQueryable。

于 2011-01-31T16:06:23.077 回答
1

您正在对错误的查询进行排序。

将您的代码更改为:

        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()由于您正在投影,因此在您的示例中完全没有必要。

于 2011-01-31T16:07:38.043 回答