我有以下jsfiddle在pivot中生成一个jqgrid。 jsfiddle code 它使用以下json数据。
var data = [{
"id": 1,
"make": "toyota",
"model": "corolla",
"fuelusagecity": "17",
"fuelusagehwy": "12",
"fuelmeasure":'Litre',
"salesaboveavg": false,
"totalnumberofsales": 120000.0000,
"highsalestext": null,
"salesdate": "2010-12-01",
"shortsalesdate": "10-12-01",
"groupheaderorder":"1",
"childorder":"1"
}, {
"id": 2,
"make": "toyota",
"model": "corolla",
"fuelusagecity": "10",
"fuelusagehwy": "14",
"salesaboveavg": false,
"fuelmeasure":'Litre',
"totalnumberofsales": 100000.0000,
"highsalestext": "HIGH",
"salesdate": "2010-12-15",
"shortsalesdate": "10-12-15",
"groupheaderorder":"1",
"childorder":"1"
}, {
"id": 3,
"make": "toyota",
"model": "belta",
"fuelusagecity": "15",
"fuelusagehwy": "10",
"salesaboveavg": true,
"fuelmeasure":'Litre',
"totalnumberofsales": 200000.0000,
"highsalestext": null,
"salesdate": "2011-01-10",
"shortsalesdate": "11-01-10",
"groupheaderorder":"1",
"childorder":"2"
}, {
"id": 4,
"make": "toyota",
"model": "camry",
"fuelusagecity": "13",
"fuelusagehwy": "10",
"fuelmeasure":'Litre',
"salesaboveavg": false,
"totalnumberofsales": 300000.0000,
"highsalestext": "HIGH",
"salesdate": "2011-04-23",
"shortsalesdate": "11-04-23",
"groupheaderorder":"1",
"childorder":"3"
}, {
"id": 5,
"make": "nissan",
"model": "skyline",
"fuelusagecity": "14",
"fuelusagehwy": "9",
"fuelmeasure":'Litre',
"salesaboveavg": true,
"totalnumberofsales": 500000.0000,
"highsalestext": "HIGH",
"salesdate": "2010-09-10",
"shortsalesdate": "10-09-10",
"groupheaderorder":"2",
"childorder":"1"
}, {
"id": 6,
"make": "nissan",
"model": "zx300",
"fuelusagecity": "10",
"fuelusagehwy": "8",
"fuelmeasure":'Litre',
"salesaboveavg": false,
"totalnumberofsales": 400000.0000,
"highsalestext": null,
"salesdate": "2012-01-06",
"shortsalesdate": "12-01-06",
"groupheaderorder":"2",
"childorder":"2"
}];
在json数据中,销售日期有两种格式salesdate
属性的年份为四位数,shortsalesdate
的年份为两位数。在网格动态销售日期列中,必须以yy-mm-dd格式显示销售日期(因此要显示它应使用shortsalesdate
属性)。
在小提琴代码中,日期按降序排序。新修改还必须按降序排序日期。这次它应该使用属性salesdate
中的销售日期进行排序,但它应该使用列标题上的属性' shortsalesdate`显示销售日期。
其次,有两个按钮来显示和隐藏列。在隐藏/显示之前,方法getYColumnName
中的销售日期进行了比较。在当前的jsfiddle代码中,它使用salesdate
属性中的值进行比较。这应该保持不变。
所以基本上有两件事:
1.要显示销售日期,应使用属性shortsalesdate
中的值
2.对于所有日期的比较和排序,它必须使用属性salesdate
我如何实现这一目标?
旁注:
我正在考虑在列标题中存储两个值,其中一个隐藏值来自属性shortsalesdate
,一个可见值来自属性shortsalesdate
。那么基本上可以在列中存储两个值吗?
感谢
答案 0 :(得分:1)
我可以建议你如何在当前版本的免费jqGrid版本4.13.6中实现你的要求,但我认为你的问题的解决方案应该很容易。
您要做的只是自定义文本,该文本将显示在列标题中。因此我在free jqGrid的代码中做了一些更改(见这里)并将结果发布到GitHub。
The demo从GitHub加载最新代码,并使用
yDimension: [
{ dataName: "salesdate", sortorder: "desc",
label: function (options) {
// options has the following properties:
// yData, yIndex, yLevel, pivotOptions
var date = String(options.yData).split("-");
return date[0].substr(2) + "-" + date[1] + "-" + date[2];
}}
]
新的label
回调允许根据数据构造列标题。我将日期分割为-
,从年份中删除前两个符号并构建新字符串。人们可以看到如下图所示的结果
我的演示版不使用shortsalesdate
属性,只使用原始salesdate
。
在yDimension
中使用多个元素时,同样适用。演示https://jsfiddle.net/OlegKi/e1rvyczh/3/使用
yDimension: [
{ dataName: "salesYear", sorttype: "integer", sortorder: "desc",
label: function (options) {
return "(" + options.yData + ")";
}},
{ dataName: "salesdate", sortorder: "desc",
label: function (options) {
// options has the following properties:
// yData, yIndex, yLevel, pivotOptions
var date = String(options.yData).split("-");
return date[0].substr(2) + "-" + date[1] + "-" + date[2];
}}
]
年份的虚拟格式:我只是使用(
将其括在大括号中)
和return "(" + options.yData + ")";
。结果如下所示