动态填充Jqgrid下拉过滤器
Dynamically populate Jqgrid drop-down filter
我修改了一个现有的 Javascript 函数以允许我填充多个 Jqgrid 下拉过滤器。代码是:
jQuery("#jQGridDemo").jqGrid({
url: 'http://localhost:58404/JQGridHandler.ashx',
datatype: "json",
colNames: ['Property ID', 'Property Ref', 'Short Address', 'Scheme Code', 'Scheme Name'],
colModel: [
{ name: 'PropertyID', index: 'PropertyID', width: 70, align: "left", stype: 'text', sortable: true},
{ name: 'PropertyRef', index: 'PropertyRef', width: 75, align: "left", stype: 'text', sortable: true},
{ name: 'ShortAddress', index: 'ShortAddress', width: 200, align: "center", sortable: true},
{ name: 'SchemeCode', index: 'SchemeCode', width: 80, align: "center", sortable: true },
{ name: 'SchemeName', index: 'SchemeName', width: 80, align: "center", sortable: true },
{name: 'PropertyType',width: 80},
],
beforeProcessing: function (data) {
getDropDownValues(data, "PropertyType")
}
.jqGrid('destroyFilterToolbar')
.jqGrid('filterToolbar', {
stringResult: true,
searchOnEnter: false,
defaultSearch: "cn"
});
}
function getDropDownValues(data, columnName) {
var propertyMap = {}, propertyValues = ":All", rows = data, i, symbol;
for (i = 0; i < rows.length; i++) {
symbol = rows[i].columnName;
if (!propertyMap.hasOwnProperty(symbol)) {
propertyMap[symbol] = 1;
propertyValues += ";" + symbol + ":" + symbol;
}
}
$(this).jqGrid("setColProp", 'columnName', {
stype: "select",
searchoptions: {
value: propertyValues
}
})
}
但是,提供的列名 ("PropertyType") 在 Json 数据中找不到,即使它存在。原始函数明确提到了列名并且有效:
symbol = rows[i].PropertyType;
有人知道我应该如何引用作为变量提供而不是被明确提及的列名吗?
示例数据:
[{"PropertyID":1,"PropertyRef":"1","ShortAddress":"99 ROCK LANE,BODMIN,PL91 1NR","SchemeCode":"700000","SchemeName":"LODMIN","PropertyType":"HOU"}
谢谢
在对象中将字符串参数作为 属性 传递的方式将不起作用。
在运行时这相当于:
符号=行[i]."PropertyType"
这是不正确的。
幸运的是你可以传递它,因为它是数组元素。像这样
符号=行[i][列名];
在运行时会产生
符号=行[i]["PropertyType"];
哪个是正确的
我修改了一个现有的 Javascript 函数以允许我填充多个 Jqgrid 下拉过滤器。代码是:
jQuery("#jQGridDemo").jqGrid({
url: 'http://localhost:58404/JQGridHandler.ashx',
datatype: "json",
colNames: ['Property ID', 'Property Ref', 'Short Address', 'Scheme Code', 'Scheme Name'],
colModel: [
{ name: 'PropertyID', index: 'PropertyID', width: 70, align: "left", stype: 'text', sortable: true},
{ name: 'PropertyRef', index: 'PropertyRef', width: 75, align: "left", stype: 'text', sortable: true},
{ name: 'ShortAddress', index: 'ShortAddress', width: 200, align: "center", sortable: true},
{ name: 'SchemeCode', index: 'SchemeCode', width: 80, align: "center", sortable: true },
{ name: 'SchemeName', index: 'SchemeName', width: 80, align: "center", sortable: true },
{name: 'PropertyType',width: 80},
],
beforeProcessing: function (data) {
getDropDownValues(data, "PropertyType")
}
.jqGrid('destroyFilterToolbar')
.jqGrid('filterToolbar', {
stringResult: true,
searchOnEnter: false,
defaultSearch: "cn"
});
}
function getDropDownValues(data, columnName) {
var propertyMap = {}, propertyValues = ":All", rows = data, i, symbol;
for (i = 0; i < rows.length; i++) {
symbol = rows[i].columnName;
if (!propertyMap.hasOwnProperty(symbol)) {
propertyMap[symbol] = 1;
propertyValues += ";" + symbol + ":" + symbol;
}
}
$(this).jqGrid("setColProp", 'columnName', {
stype: "select",
searchoptions: {
value: propertyValues
}
})
}
但是,提供的列名 ("PropertyType") 在 Json 数据中找不到,即使它存在。原始函数明确提到了列名并且有效:
symbol = rows[i].PropertyType;
有人知道我应该如何引用作为变量提供而不是被明确提及的列名吗?
示例数据:
[{"PropertyID":1,"PropertyRef":"1","ShortAddress":"99 ROCK LANE,BODMIN,PL91 1NR","SchemeCode":"700000","SchemeName":"LODMIN","PropertyType":"HOU"}
谢谢
在对象中将字符串参数作为 属性 传递的方式将不起作用。
在运行时这相当于:
符号=行[i]."PropertyType"
这是不正确的。
幸运的是你可以传递它,因为它是数组元素。像这样
符号=行[i][列名];
在运行时会产生
符号=行[i]["PropertyType"];
哪个是正确的