如果我们想隐藏列(第7个月,范围:黑色边框)
或隐藏专栏(2015年,绿色边框)
我们可以使用任何解决方案或jqGrid选项吗?
答案 0 :(得分:2)
jqPivot
方法没有允许您直接隐藏某些列的特殊选项,但可以使用beforeInitGrid
回调对colModel
进行任何修改网格将被创建。唯一的问题是:必须了解jqPivot
用于编写beforeInitGrid
回调的正确代码的列的确切名称转换。所以我首先描述jqPivot
的一些内部结构,然后beforeInitGrid
回调的代码将清楚地理解。我根据这个例子解释了这个问题。我建议所有人阅读the wiki article,其中提供了有关free jqGrid 4.9.0中实施的jqPivot
的其他信息。
首先,我必须提醒jqPivot
获取将根据xDimension
和yDimension
选项编制索引的输入数据,然后计算所有项目的聚合函数x和y值。聚合函数将由aggregates
参数指定。换句话说,jqPivot
是输入数据的“预处理器”。它会分析数据并生成新的data
和colModel
,以显示有关原始数据的更紧凑的信息。
要实现您的要求,您需要了解jqPivot
将为将生成的colModel
使用哪些列名称。此外,还需要了解如何获取列的相应y
值。
例如,我们有以下输入数据:
var data = [{
CategoryName: "Baby", ProductName: "Baby Oil",
Price: "193.81", Quantity: "1",
sellmonth: "7", sellyear: "2011", week: "first"
}, {
CategoryName: "Mom", ProductName: "Shampoo",
Price: "93.81", Quantity: "1",
sellmonth: "12", sellyear: "2011", week: "first"
}, {
CategoryName: "none", ProductName: "beauty",
Price: "93.81", Quantity: "1",
sellmonth: "12", sellyear: "2011", week: "second"
}, {
CategoryName: "none", ProductName: "beauty",
Price: "93.81", Quantity: "1",
sellmonth: "12", sellyear: "2011", week: "third"
}, {
CategoryName: "none", ProductName: "Shampoo",
Price: "105.37", Quantity: "2",
sellmonth: "12", sellyear: "2011", week: "third"
}, {
CategoryName: "none", ProductName: "beauty",
Price: "93.81", Quantity: "1",
sellmonth: "12", sellyear: "2015", week: "second"
}];
我们用作jqPivot选项
$("#pvtCrewAttendance").jqGrid("jqPivot",
data,
{
footerTotals: true,
footerAggregator: "sum",
totals: true,
totalHeader: "Grand Total",
totalText: "<span style='font-style: italic'>Grand {0} {1}</span>",
xDimension: [
{ dataName: "CategoryName", label: "Category Name", sortorder: "desc" },
{ dataName: "ProductName", label: "Product Name", footerText: "Total:" }
],
yDimension: [
{ dataName: "sellyear", sorttype: "integer", totalHeader: "Total in {0}" },
{ dataName: "sellmonth", sorttype: "integer" }//,
//{ dataName: "week" }
],
aggregates: [
{ member: "Price", aggregator: "sum", summaryType: "sum", label: "{1}" },
{ member: "Quantity", aggregator: "sum", summaryType: "sum", label: "{1}" }
]
},
{/* jqGrid options ...*/});
生成的透视网格将显示在the demo:
上
上述选项意味着输入数据构建CategoryName
的{{1}}和ProductName
属性的qnique值 - 值 - 网格的第一行。这是
x
上面的数组是[["Baby", "Baby Oil"], ["Mom", "Shampoo"], ["none", "beauty"], ["none", "Shampoo"]]
。同样,唯一的xIndex
- 值为
y
这些值构建了[["2011", "7"], ["2011", "12"], ["2015", "12"]]
的列。如果在某些colModel
中使用totalHeader
,totalHeader
,totalText
或totals: true
属性,则会包含总数超过该组的其他列。在上面的示例中,一个使用yDimension
totalHeader
。这意味着将在dataName: "sellyear"
“2011”和“2015”的列的末尾插入另外两列同时包含aggregates
(Price
之和和Quantity
之和)的列”
网格的第一个列名称为sellyear
和"x0"
(对应"x1"
中的项目数)。然后是列名称以xDimension
开头,结尾y
和a0
(对应a1
中的项目数)。最后两个“总计”列的名称为aggregates
和"ta0"
(对应"ta1"
中的项目数)。如果aggregates
仅包含一个元素,那么以aggregates
或a0
开头的列中将缺少后缀(结尾)a1
和y
。分组总列的名称以t
开头,中间为y
,末尾为t
(如a
)。我在上面的示例中包含了一个关于列名称的示例
我希望看到我用红色写的列名。这是所有14列的y1t0a0
值:name
,x0
,x1
,y0a0
,y0a1
,y1a0
,{ {1}},y1a1
,y1t0a0
,y1t0a1
,y2a0
,y2a1
,y2t0a0
,y2t0a1
。
现在重要的是要提到ta0
包含ta1
和jqPivot
用于构建内部的数据透视表。准确地说,可以获取jqGrid 的xIndex
参数并检查yIndex
和pivotOptions
属性。我们将看到上面包含的项目数组。
最后,我们现在有足够的信息来理解the demo中使用的以下代码,该代码会隐藏您提出的列:
该演示使用以下隐藏所需列的xIndex.items
:
yIndex.items