服务器端排序JQGrid排序按钮不起作用

时间:2013-02-25 11:34:08

标签: javascript jquery sorting asp-classic jqgrid

我已经在jqgrid中用'json'数据声明了这个:

sortname: 'CascadeId',
sortorder: 'asc',
sortable: true,

但排序按钮无效。我用asp实现了服务器端排序。但按钮不起作用。你能说明如何启用按钮吗?

更新 初始GET请求:

http://localhost/myHandler.ashx?_search=false&nd=1361795033464&rows=20&page=1&sidx=CascadeId&sord=asc

ColModel:

colModel: [ { name: 'CascadeId', index: 'CascadeId', width: 85, sortable: true, editable: true, editrules: { custom: true, custom_func: validateCascadeID, required: true} }, { name: 'VenuProfile', index: 'VenuProfile', width: 150, sortable: false, editable: true, edittype: 'select', editoptions: { value: VenuProfile, width: 90, align: 'left'} }, { name: 'Location', index: 'Location', width: 210, sortable: false, editable: true }, ]

1 个答案:

答案 0 :(得分:1)

如果您在POST sidx&中看到排序信息。 sord并且您正在接收服务器上的这些值(再次sidx& sord),然后您需要在服务器上获取数据等效order by

Ex在C#中order by,然后数据的分页请求看起来像:

var pagedQuery = dataset.OrderBy(sidx + " " + sord).Skip((page - 1) * rows).Take(rows);

编辑 我的一个工作网格的一部分,以DateTimeMail' column in desc`顺序排序开始。

客户端:

        $('#Mailbox').jqGrid({
            datatype: 'json',
            url: '/Mail/MailboxGetGridData',
            mtype: 'POST',
            autoencode: true,
            postData: { Mailbox: 'Inbox' },
            colNames: ['IdMail', 'From', 'To', 'Date / Time', 'Subject', 'Message', 'HasBeenRead'],
            colModel: [
                { name: 'IdMail', index: 'IdMail', width: 95, align: 'center', sortable: false, hidden: true, editable: false },
                { name: 'IdSender', index: 'IdSender', width: 150, align: 'center', sortable: true, firstsortorder: 'desc', hidden: false, editable: false },
                { name: 'IdRecipient', index: 'IdRecipient', width: 150, align: 'center', sortable: true, firstsortorder: 'desc', hidden: false, editable: false },
                { name: 'DateTimeMail', index: 'DateTimeMail', width: 150, align: 'center', sortable: true, firstsortorder: 'desc', hidden: false, editable: false },
                { name: 'Subject', index: 'Subject', width: 250, align: 'left', sortable: false, hidden: false, editable: false },
                { name: 'Message', index: 'Message', width: 150, align: 'center', sortable: false, hidden: true, editable: false },
                { name: 'HasBeenRead', index: 'HasBeenRead', width: 150, align: 'center', sortable: false, hidden: true, editable: false },
            ],
            pager: $('#MailboxPager'),
            rowNum: 5,
            rowList: [5, 10, 20, 50],
            sortname: 'DateTimeMail',
            sortorder: "desc",
....

服务器端:

    public ActionResult MailboxGetGridData(string sidx, string sord, int page, int rows, bool _search, string filters)
{
  .....
  var pagedQuery = filteredQuery.OrderBy(sidx + " " + sord).Skip((page - 1) * rows).Take(rows);
  var jsonData = new
            {
                total = (totalRecords + rows - 1) / rows,
                page = page,
                records = totalRecords,
                rows = (
                    from item in pagedQuery.ToList()
                    select new
                    {
                        cell = new string[] {
                            item.IdMail.ToString(),
                            HelperClasses.HelperMethods.getUserName(item.IdSender),
                            HelperClasses.HelperMethods.getUserName(item.IdRecipient),
                            ((DateTime)item.DateTimeMail).ToString("g"),
                            item.Subject,
                            item.Message,
                            (Mailbox == "Inbox") ? item.HasBeenRead.ToString() : "True"
                        }
                    }).ToArray()
            };

            return Json(jsonData, JsonRequestBehavior.AllowGet);