我已经让我的网格在添加和编辑时显示动态构建的选择下拉列表。但是,当它只显示网格中的数据时,它会显示下拉列表而不是其关联数据。有没有办法让网格显示与索引相关的数据而不是索引本身。
e.g。我选择的数据可能是“0:你好; 1:世界”;编辑/添加窗口中的下拉列表显示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的新手,所以请你也提供一些例子。
答案 0 :(得分:1)
我知道你已经解决了这个问题,但我在项目中遇到了同样的问题,想提供我的解决方案。
首先,我为select列声明了一个自定义格式化程序(在本例中为'username'列)。
$.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和user的映射,并返回特定cellvalue的用户名。然后,我将formatter:'selectuser'
选项设置为列colModel
,然后就可以了。
当然,这会在网格中显示每行一个json请求。我通过在我的json响应的标题中设置10秒caching来解决这个问题,如下所示:
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数据。
答案 1 :(得分:0)