【问题标题】:Slickgrid 3 grouping how to remove totals row?Slickgrid 3分组如何删除总计行?
【发布时间】:2014-03-11 04:56:15
【问题描述】:

我使用多行分组并将总计放在分组标题中。 我没有使用总计行中的总计。我看到行是分组的,并且总数所在的位置是空行。在我的情况下,每个子分组后都有一个空行,最后父总计有一个空行。
如何删除这些总计行? 谢谢!

.cshtml:

  <div id="gridList" class="grid" style="width: 100%; height: 500px"></div>

.js

$(function() {
    var columns = [
    {
        id: "isExcluded",
        name: "Exclude",
        field: "isExcluded" /*, width: 120*/,
        formatter: Slick.Formatters.Checkmark,
        editor: Slick.Editors.Checkbox, sortable: true
    },
    {
        id: "symbol",
        name: "Symbol",
        field: "symbol",
        sortable: true /*, width: 120*/
    },
    {
        id: "price",
        name: "Price",
        field: "price",
        sortable: true
        //, groupTotalsFormatter: sumTotalsFormatter 
    },
    {
        id: "parent_name",
        name: "Parent Name",
        field: "parent_name",
        sortable: true /*, width: 120*/
    },

    {
        id: "description",
        name: "Description",
        field: "description",
        sortable: true,
        width: 120,
        editor: Slick.Editors.Text,
    },
    { id: "cancel_ind", 
      name: "Canceled", 
      field: "cancel_ind", 
      sortable: true, width: 80 }
];

function requiredFieldValidator(value) {
    if (value == null || value == undefined || !value.length) {
        return { valid: false, msg: "This is a required field" };
    } else {
        return { valid: true, msg: null };
    }
};

var options = {
    editable: true,
    enableAddRow: true,
    enableCellNavigation: true,
    asyncEditorLoading: false,
    autoEdit: true,
    enableExpandCollapse: true,
    rowHeight: 25
};

var sortcol = "parent_name";
var sortdir = 1;
var grid;
var data = [];
var groupItemMetadataProviderTrades = new Slick.Data.GroupItemMetadataProvider();
var dataView = new Slick.Data.DataView({ groupItemMetadataProvider:      groupItemMetadataProviderTrades });

dataView.onRowCountChanged.subscribe(function (e, args) {
    grid.updateRowCount();
    grid.render();
});

dataView.onRowsChanged.subscribe(function (e, args) {
    grid.invalidateRows(args.rows);
    grid.render();
});

function groupByParentAndSymbol() {
    dataViewTrades.setGrouping([
        {
            getter: "parent_name",
            formatter: function(g) {
                return "Parent:  " + g.value + "  <span style='color:green'>(" + g.count + " items)  Total: " + g.totals.sum.price + "</span>";
            },
            aggregators: [
                new Slick.Data.Aggregators.Sum("price")
            ],
            aggregateCollapsed: true
            ,lazyTotalsCalculation: true
        },
    {
        getter: "symbol",
        formatter: function(g) {
            return "Symbol:  " + g.value + "  <span style='color:green'>(" + g.count + " items)   Total: " + g.totals.sum.price + "</span>";
        },
        aggregators: [
            new Slick.Data.Aggregators.Sum("price")
        ],
        collapsed: true
        ,lazyTotalsCalculation: true
    }]);
};

grid = new Slick.Grid("#gridList", dataView, columns, options);
grid.registerPlugin(groupItemMetadataProviderTrades);
grid.setSelectionModel(new Slick.RowSelectionModel());

..... /*sorting support etc*/

 // use instead of the default formatter <---  removed not used.
 function sumTotalsFormatter(totals, columnDef) {
    var val = totals.sum && totals.sum[columnDef.field];
    //if (val != null) {
    //    return "total: " + ((Math.round(parseFloat(val) * 100) / 100));
    //}
    return "";
 }

// will be called on a button click (I didn't include the code as irrelevant)
var getDataList = function () {
    $.getJSON('/Home/GetData/', function (json) {
        data = json;
        dataView.beginUpdate();
        dataView.setItems(data);
        groupByParentAndSymbol();
        dataView.endUpdate();
        dataView.syncGridSelection(grid, true);
    });
 };

  getDataList();

});

【问题讨论】:

    标签: javascript asp.net-mvc-4 twitter-bootstrap-3 slickgrid


    【解决方案1】:

    向数据视图添加 displayTOtalsRow: false 解决了我的问题 - 现在不显示总行数。

     var dataView = new Slick.Data.DataView({ groupItemMetadataProvider: groupItemMetadataProviderTrades, displayTotalsRow: false });
    

    【讨论】:

    • 这个答案似乎是错误的,查看line 上的 DataView 代码,我们可以看到 displayTotalsRow 是 Group 本身的标志,而不是 DataView 中的标志.除非这在之前版本的 SlickGrid 中存在,在 Grouping 重写之前?
    【解决方案2】:

    简单回答您的问题...只需删除 aggregators: [...],当我说删除时您有 2 个选项,您可以删除数组 [...] 的任何内容,或者您​​可以简单地完全删除该对象行(因此删除完全是aggregators[...])。

    现在,如果您想进一步解释它的工作原理……让我们给您一些定义,以便您更好地理解。聚合是聚集在一起形成总量的项目的集合。有问题的总数可以是所有字段的总和,一个平均值或您可能定义的其他类型的聚合器。所以基本上就是按照你选择的列重新分组的动作,并给出分组的计算结果。好吧,现在它在 SlickGrid 的情况下是如何工作的?您需要定义您想要使用的聚合器类型(Avg、Sum 等...),这些聚合器位于您的 function groupByParentAndSymbol() 中,定义它们将执行计算BUT,除非您将其附加到字段,不会显示任何内容,因此在示例中您发现将 groupTotalsFormatter: sumTotalsFormatter 附加/绑定到您的列定义非常重要,例如:

    ...var columns = [{id: "cost", ...width: 90, groupTotalsFormatter: sumTotalsFormatter}, ...];
    

    让我们回顾一下...一旦定义了聚合器new Slick.Data.Aggregators.Sum("cost"),它将进行计算,但除非它绑定到该字段,否则不会显示任何内容。作为一个额外的选项,aggregateCollapsed(真/假)是在您折叠时显示组内或组外的小计(平均值、总和或其他)。

    【讨论】:

    • 我使用总和聚合器来计算总和,但我在分组标题行显示总和值而不是行。
    • 我相信它们是链接在一起的,如果相信如果你删除 aggregator:[] 那么它不会显示为空行但也不会计算..它就像一个 catch 22。 .哈哈
    • 刚刚想通了。 var dataView = new Slick.Data.DataView({ groupItemMetadataProvider: groupItemMetadataProviderTrades, displayTotalsRow: false }); displayTotalsRow 不应该在选项中(我猜没有做任何事情,因为我正在使用 dataVIew),而是在 dataView 初始化中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多