小编典典

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

ajax

我有一种情况,我在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} },

我想看看是否有一种方法可以使tihs正常工作,而无需两次单独的ajax调用同一操作,只是为了获得相同的数据列表:

   dataUrl: "/Person/GetSelectData"

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


阅读 203

收藏
2020-07-26

共1个答案

小编典典

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

第一种方式:用法value即功能。可以将您通常返回的数据包含在"/Person/GetSelectData"主要JSON响应中。例如,您可以使用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了。它允许使用IDS
31以及2主数据的内部(rowsJSON数据的一部分)。使用的标准方式dataUrl不允许使用formatter:"select"

2020-07-26