无论如何在jqgrid中有多个列,读取下拉列表的相同源数据?

我有一个案例,我在jqGrid中有多个列,它们使用相同的列表来填充下拉列表。

{ name: "Manager", index: "Manager", width: 120, editable: true, edittype: "select", editoptions: { dataUrl: "/Person/GetSelectData" }, editrules: { required: false} }, { name: "Delegate", index: "Delegate", width: 120, editable: true, edittype: "select", editoptions: { dataUrl: "/Person/GetSelectData" }, editrules: { required: false} }, 

我想知道是否有一种方法可以让上面的工作没有两个单独的ajax调用同一个动作只是为了得到相同的数据列表:

  dataUrl: "/Person/GetSelectData" 

所以我可以调用一次,并将项目列表链接到两列? 这在jqGrid中可能吗?

任何你想要的实现都意味着某种缓存"/Person/GetSelectData" 。 我更喜欢自己的一种方法是使用value而不是dataUrl 。 选择值列表可以包含填充网格的服务器的主响应中 。 在url使用的操作可以返回其他数据的情况下 。 您可以使用定义为函数的value内部返回的数据,也可以在beforeProcessing设置value 。 为了使我的建议更清楚,我在一个例子中解释它。

第一种方式: value作为功​​能。 可以包含通常在主JSON响应中的"/Person/GetSelectData"返回的数据。 例如,您可以使用userdata (或输入数据的任何其他扩展):

 { "rows": [ ... ], "userdata": { "Persons": "Bill:Bill;Oleg:Oleg;Leora:Leora" } } 

然后一个人可以使用

 beforeProcessing: function (data) { var $self = $(this), userData = data.userdata, persons, selectOptions; if (userData && userData.Persons) { persons = userData.Persons; selectOptions = { searchoptions: { value: ":All;" + persons }, // for toolbar search stype: "select", editoptions: { value: persons }, edittype: "select" }; $self.jqGrid("setColProp", "Manager", selectOptions); $self.jqGrid("setColProp", "Delegate", selectOptions); } } 

顺便说一下,甚至可以使用formatter: "select"用于“管理器”和“委托”列。 它允许使用id而不是名称。 例如

 "Persons": "3:Bill;1:Oleg;2:Leora" 

应该添加formatter: "select" to selectOptions 。 它允许在主数据内部使用id 32 (JSON数据的rows部分)。 使用dataUrl的标准方法不允许使用formatter: "select"

我建议你阅读答案 , 这个和这个 答案有关使用beforeProcessing处理动态修改网格的更多信息。