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

时间:2014-01-15 17:36:52

标签: jquery ajax 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中可能吗?

1 个答案:

答案 0 :(得分:1)

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

第一种方式:使用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"添加到selectOptions。它允许在主数据(3部分JSON数据)中使用ID 12rows。使用dataUrl的标准方式不允许使用formatter: "select"

我建议您阅读the answerthis onethis one,了解有关动态修改网格的使用beforeProcessing的更多信息。