【问题标题】:jqGrid editotype: 'select, formatter: 'select' not workingjqGrid 编辑类型:'选择,格式化程序:'选择'不起作用
【发布时间】:2012-03-09 17:35:15
【问题描述】:

我正在使用 JSON 来检索选择元素的值。
我的colModel 是:

{ name: 'position', editable: true, edittype: "select", formatter:'select',
    editoptions: {
        value: function() {
            var positions;
            $.ajax({
                url: "orthofixServices.asmx/GetPositionsList",
                data: "{}",
                async: false,
                success: function(data) {
                    positions = data.d;
                },
                error: function(XMLHttpRequest, textStatus, errorThrown) {
                    alert(textStatus);
                }
             });
            return positions;
        }

这是回复:

{
    "d": {
        "21": "CAP Pos 1",
        "41": "CAP Pos 2",
        "42": "CAP Pos 3"
    }
}

并且从服务器发回绑定网格的行是

{
    "d": {
        "page": 1,
        "total": 1,
        "records": 1,
        "rows": [
            {
                "id": 9,
                "name": "Julio",
                "nameid": 0,
                "title": "Doctor",
                "npi": "123-123",
                "license": "licabc",
                "licstate": "NV",
                "position": "41",
                "us": false,
                "hrate": 0,
                "rrate": 0
            }
        ]
    }
}

“位置”是提供select 元素的行中的字段。保存该行后,网格上没有显示任何内容。为什么?我应该将选择中的密钥保存为Int 还是String。有关系吗?我尝试了两种方法,我从来没有在网格上为选择元素显示任何内容。它应该显示:"CAP Pos 42"

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

    我建议您使用editoptionsdataUrlbuildSelect 属性。此外,您还必须设置 jqGrid 的 ajaxSelectOptions 选项的一些属性。

    有关用法示例,请参阅 hereherehere

    【讨论】:

    • 我完全按照您在示例 3 中展示的方式进行了操作。我确实从数据库中获得了结果,并且列表被填充了。如果我离开格式化程序;在网格上没有显示任何内容后“选择”,如果我删除此设置,它会显示键而不是值...我正在将键保存在数据库中,我希望这就是方式....请建议跨度>
    • 我必须说您的示例仅显示选择的“键”和“文本”的相同值。我确实通过放置 " 改变了选择的构建方式是否有其他不同之处?
    • @ManuelValle:如果您想将 select 与其他值一起用作选项文本,您应该非常小心。如何填充网格以及何时设置value 非常重要。例如,您可以使用GetPositionsList 的响应扩展在填充网格期间从服务器返回的数据。在beforeProcessing 内部,您可以修改editoptions.value。如果您使用编辑,则必须进行更多额外的自定义以发送 value 而不是所选选项的文本。所以所有的东西都需要详细检查,你使用的完整代码需要查看。
    • @ManuelValle:即使从设计的角度来看,如果您需要动态加载值/文本,我也建议您不要使用formatter:'select'。 id 是服务器实现的详细信息,客户端不应该真正知道它。如果您在服务器端拥有该选项的名称,您可以轻松修改相应的 SQL 查询以使用名称而不是 id。通常,您在 name 列上使用 UNIQUE CONSTRAINT,因此按名称搜索实际上与按 id 搜索一样快。
    • 嗯,我真的需要在数据库中存储 id 而不是文本,这是一个要求。所以我找到了一个帖子,你在变量中加载选择的值,然后在加载完成时将这些值添加到选择中......这并不理想,但它正在工作......谢谢
    【解决方案2】:

    一个简单的可悲事实是

    formatter:'select',  editoptions: { value: function() { ...
    

    jqGrid 没有实现。 $.unformat.select 的源代码根本无法处理这种情况。 只需将数据转换为数组,通过value传递给函数即可达到同样的效果。

    【讨论】:

      猜你喜欢
      • 2019-06-10
      • 2013-07-06
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 2011-11-18
      相关资源
      最近更新 更多