jqGrid - 隐藏pivot中的特定列或行

时间:2015-07-02 10:18:56

标签: jqgrid pivot free-jqgrid

如果我们想隐藏列(第7个月,范围:黑色边框)

或隐藏专栏(2015年,绿色边框)

我们可以使用任何解决方案或jqGrid选项吗?

enter image description here

1 个答案:

答案 0 :(得分:2)

jqPivot方法没有允许您直接隐藏某些列的特殊选项,但可以使用beforeInitGrid回调对colModel 进行任何修改网格将被创建。唯一的问题是:必须了解jqPivot用于编写beforeInitGrid回调的正确代码的列的确切名称转换。所以我首先描述jqPivot的一些内部结构,然后beforeInitGrid回调的代码将清楚地理解。我根据这个例子解释了这个问题。我建议所有人阅读the wiki article,其中提供了有关free jqGrid 4.9.0中实施的jqPivot的其他信息。

首先,我必须提醒jqPivot获取将根据xDimensionyDimension选项编制索引的输入数据,然后计算所有项目的聚合函数x和y值。聚合函数将由aggregates参数指定。换句话说,jqPivot是输入数据的“预处理器”。它会分析数据并生成新的datacolModel,以显示有关原始数据的更紧凑的信息。

要实现您的要求,您需要了解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

enter image description here

上述选项意味着输入数据构建CategoryName的{​​{1}}和ProductName属性的qnique值 - 值 - 网格的第一行。这是

x

上面的数组是[["Baby", "Baby Oil"], ["Mom", "Shampoo"], ["none", "beauty"], ["none", "Shampoo"]] 。同样,唯一的xIndex - 值为

y

这些值构建了[["2011", "7"], ["2011", "12"], ["2015", "12"]] 的列。如果在某些colModel中使用totalHeadertotalHeadertotalTexttotals: true属性,则会包含总数超过该组的其他列。在上面的示例中,一个使用yDimension totalHeader。这意味着将在dataName: "sellyear"“2011”和“2015”的列的末尾插入另外两列同时包含aggregatesPrice之和和Quantity之和)的列”

网格的第一个列名称为sellyear"x0"(对应"x1"中的项目数)。然后是列名称以xDimension开头,结尾ya0(对应a1中的项目数)。最后两个“总计”列的名称为aggregates"ta0"(对应"ta1"中的项目数)。如果aggregates仅包含一个元素,那么以aggregatesa0开头的列中将缺少后缀(结尾)a1y。分组总列的名称以t开头,中间为y,末尾为t(如a)。我在上面的示例中包含了一个关于列名称的示例

enter image description here

我希望看到我用红色写的列名。这是所有14列的y1t0a0值:namex0x1y0a0y0a1y1a0,{ {1}},y1a1y1t0a0y1t0a1y2a0y2a1y2t0a0y2t0a1

现在重要的是要提到ta0包含ta1jqPivot用于构建内部的数据透视表。准确地说,可以获取jqGrid 的xIndex参数并检查yIndexpivotOptions属性。我们将看到上面包含的项目数组。

最后,我们现在有足够的信息来理解the demo中使用的以下代码,该代码会隐藏您提出的列:

enter image description here

该演示使用以下隐藏所需列的xIndex.items

yIndex.items