jqGrid动态选择选项

10
我正在创建一个带下拉列的jqgrid,使用单元格编辑。我需要动态更改下拉列的选项,我尝试通过将该列设置为:
{ name: "AccountLookup", index: "AccountLookup", width: 90, editable: true, resizable: true, edittype: "select", formatter: "select" },

然后,在beforeCellEdit事件中,我有以下代码:

beforeEditCell: function(id, name, val, iRow, iCol) {
        if(name=='AccountLookup') {             
            var listdata = GetLookupValues(id, name);
            if (listdata == null) listdata = "1:1";                              
            jQuery("#grid").setColProp(name, { editoptions: { value: listdata.toString()} })                                
        }
    },

GetLookupValues只是以"1:One;2:Two"这样的格式返回一个字符串。 虽然这种方法可以正常工作,但是选项总是滞后一次点击——即我在第1行中单击AccountID时,下拉菜单为空,然后当我单击第3行中的AccountID时,我在第1行单击时设置的选项将显示在第3行中。依此类推。所以总是比实际操作滞后一次。

是否有其他方法可以实现我所需的功能?基本上,显示的下拉选项始终在更改,我需要在用户输入单元格进行编辑时加载它们。 也许我可以在beforeEditCell事件中以某种方式获取选择控件,并手动输入其值,而不是使用setColProp调用?如果可以的话,请给我一个这样做的示例吗?

另外一件事——如果下拉列表为空,且用户没有取消单元格编辑,则网格脚本会抛出错误。如果使用客户端数组编辑,这可能会有所不同。


还有一件事 - select列上的getChangedCells选项始终返回文本而不是值/ID - 有没有解决方法? - Jo
1个回答

3
您可以使用dataInit选项,像这样:
{ name: "AccountLookup", index: "AccountLookup", width: 90,
    editable: true, resizable: true, edittype: "select", formatter: "select",
    editoptions: { dataInit: function( elem )
    {
        $(elem).empty()
            .append("<option value='1'>Apples</option>")
            .append("<option value='2'>Oranges</option>");
    } } }

只需用您的GetLookupValues()函数替换静态的Apples & Oranges选项即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接