2

在此链接的示例代码中使用了示例代码

我已经让我的网格在添加和编辑时显示一个动态构建的选择下拉列表。但是,当它只是在网格中显示数据时,它会显示下拉索引而不是其关联数据。有没有办法让网格显示与索引关联的数据而不是索引本身。

例如,我选择的数据可能是“0:Hello;1:World”;编辑/添加窗口上的下拉菜单显示 Hello 和 World 并具有正确的索引。如果单元格的值为 1,我希望它在网格本身中显示 World ,但它显示的是 1 。

这是我网格中的行本身:

{ name: 'picklist', index: 'picklist', width: 80, sortable: true, editable: true,
  edittype: "select", formatter: "select", editrules: { required: true} },

我在loadComplete事件中填充动态数据内容如下:

$('#mygrid').setColProp('picklist', { editoptions: { value: picklistdata} });

选择列表数据是“0:Hello;1:World”类型值对的字符串。

请任何人提供任何帮助。我对 JQGrids 还很陌生,所以请你也包括一些例子。

4

2 回答 2

1

我知道你已经解决了这个问题,但我在我的项目中遇到了同样的问题,并想提供我的解决方案。

首先,我为我的选择列(在本例中为“用户名”列)声明了一个自定义格式化程序。

$.extend($.fn.fmatter, {
    selectuser: function(cellvalue, options, rowdata) {
        var userdata;
        $.ajax({
            url:'dropdowns/json/user',
            async:false,
            dataType:'json',
            cache:true,
            success: function(data) {
                userdata = data;
            }
        });
        return typeof cellvalue != 'undefined' ? userdata[cellvalue] : cellvalue ;
    }
});

在这种情况下,此格式化程序加载 id 和用户的映射,并返回特定单元格值的用户名。然后,我将formatter:'selectuser'选项设置为列的colModel,它可以工作。

当然,这会在网格中显示的每一行执行一个 json 请求。我通过为我的 json 响应的标头设置 10 秒的缓存解决了这个问题,如下所示:

private function set_caching($seconds_to_cache = 10) {
    $ts = gmdate("D, d M Y H:i:s", time() + $seconds_to_cache) . " GMT";
    header("Expires: $ts");
    header("Pragma: cache");
    header("Cache-Control: max-age=$seconds_to_cache");
}

我知道这个解决方案并不完美,但对于我的应用来说已经足够了。缓存命中由浏览器立即提供服务,并且网格流畅。最终,我希望内置select格式化程序将被修复以处理 json 数据。

于 2012-02-22T20:26:50.100 回答
0

如果您保存在select元素的 jqGrid id 中并希望显示相应的文本,那么您应该formatter:'select'colModel(参见http://www.trirand.com/jqgridwiki/doku.php?id=wiki:predefined_formatter#formatter_type_select)中使用edittype: "select". _

stype: 'select'如果您打算支持数据搜索,那么您的用法可能也会很有趣。

于 2010-07-26T13:06:36.227 回答