【问题标题】:jqGrid formatter and sortable column - doesn't sortjqGrid 格式化程序和可排序列 - 不排序
【发布时间】:2010-05-03 06:46:56
【问题描述】:

我正在为我的 jqGrid columnModel 使用自定义格式化程序,但我无法使用格式化程序函数进行排序。如果我删除格式化程序列正常排序。

jQuery("#listAgentOptions").jqGrid({
    height: 240,
    datatype: "local",
    colNames: [' ', 'First Name', 'Last Name', 'Role'],
    colModel: [
    { name: 'status', index: 'status', width: 18, sorttype: 'text', align: 'center', formatter: function(cellvalue, options, rowObject) {
        return cellvalue == 1 ? "<img src='images/agent_green_s.png' alt='Ready' title='Ready' />" :
        cellvalue == 3 ? "<img src='images/agent_red_s.png' alt='Busy' title='Busy' />" :
        "<img src='images/agent_orange_s.png' alt='Pending Ready' title='Pending Ready' />";
    },
        unformat:
    function(cellvalue, options, rowObject) { return Math.floor(Math.random() + 0.1).toString(); }
    },
    { name: 'firstName', index: 'firstName', width: 92 },
    { name: 'lastName', index: 'lastName', width: 142 },
    { name: 'role', index: 'role', sorttype: 'int', width: 36, align: 'center', formatter: function(cellvalue, options, rowObject) {
        return cellvalue == true ? "<img src='images/user_gray.png' alt='Supervisor' title='Supervisor' />" : "<img src='images/user.png' alt='Agent' title='Agent' />";
    }, unformat:
    function(cellvalue, options, rowObject) { return cellvalue; }
    }
    ],
    sortname: 'lastName'
});

这样添加行:

jQuery("#listAgentOptions").jqGrid('clearGridData');
$.each(result, function(i, item) {
    if (item.ContactType == 1) {
        jQuery("#listAgentOptions").jqGrid('addRowData', i+1, { firstName: item.ContactName.split(" ")[0], lastName: item.ContactName.split(" ")[1],
        role: item.IsSupervisor,
        status: item.Status == "Ready" ? 1 : item.Status == "Busy" ? 3 : 2
        });
    }
});

如何让排序正常工作?

更新。我刚刚下载了最新版本的 jqGrid - 同样的问题。

我也尝试过使用unformat: function(cellvalue, options, rowObject) { },但那里的单元格值是空的:-E 当我使用return Math.floor(Math.random() + 0.1).toString(); 时,它会随机排序(每次点击),但return cellvalue; 只返回一个空字符串。

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

    在内部,jqGrid 使用unformat 来获取单元格的值:

            $.each(ts.rows, function(index, row) {
                try { sv = $.unformat($(row).children('td').eq(col),{rowId:row.id, colModel:ts.p.colModel[col]},col,true);}
                catch (_) { sv = $(row).children('td').eq(col).text(); }
                row.sortKey = findSortKey(sv);
                rows[index] = this;
            });
    

    然后使用列的sorttype 的处理程序解析单元格值,在 int 的情况下:

                findSortKey = function($cell) {
                    return IntNum($cell.replace(stripNum, ''),0);
                };
    

    所以基本上,如果您的 unformat 函数为每个单元格返回正确的整数,我希望列排序也能正常工作。如果还是有问题,请贴出你的完整代码,包括unformat的内容。

    【讨论】:

    • 是的,但是由于某种原因,传递给 unformat 的单元格值是空的。
    【解决方案2】:

    这可能是您的问题不在您正在搜索的位置。

    您在 jqGrid 中使用什么样的数据保存?我的意思是参数 datatype 的值。如果从服务器加载 jqGrid 数据,服务器从客户端接收排序信息,服务器必须返回排序数据。格式化程序仅用于以您喜欢的方式显示数据。 客户端排序 例如适用于datatype: 'xmlstring'datatype: "clientSide",但不适用于dataType:"xml"dataType:"json"dataType:"jsonp"sorttype 之类的参数仅适用于客户端排序,在服务器端排序 中将被忽略。主要作用:如果非要定义jqGrid的url参数,使用服务端排序。

    【讨论】:

    • 您在问题中写的信息较少。您能否发布 jqGrid 的代码。然后可以重现并解决您的问题。
    【解决方案3】:

    好的,我已经弄清楚发生了什么。

    首先你必须使用unformat将初始值传回给jqGrid排序函数。

    jqGrid 将$(row).text() 传递给unformat 函数,该函数对于只有一个html 标记的单元格返回一个空字符串,并且没有选项可以更改它。但是,您可以使用unformat 函数的第三个参数,在我的例子中是rowObject。然后,您可以使用$(rowObject).html() 检索实际的单元格值并将其解析回该值。现在可以进行排序了。

    要记住的另一件事是,如果您使用sorrtype: 'int',则必须将整数作为字符串返回,例如return '1';

    【讨论】:

      【解决方案4】:

      尝试使用 Firebug 进行调试并检查服务器接收的内容。使用sortable: true

      顺便说一下,sorttype 参数仅在本地 (datatype: local) 有效。

      【讨论】:

      • 没有服务器,正在排序数组。
      猜你喜欢
      • 2012-06-17
      • 2011-09-22
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多