2014-02-12 62 views
0

我使用多行分組並將總計放在分組標題中。 我沒有使用總計行中的總數。我看到這些行是分組的,總計在那裏有空行。在我的情況下,每個子分組後都有一個空行,並且最後有一個父行總數的空行。
如何刪除這些總計行? 謝謝!Slickgrid 3分組如何刪除總計行?

.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(); 

});

回答

3

將displayTOtalsRow:false添加到dataview解決了我的問題 - 現在不顯示總行數。

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

要簡單地回答你的問題......只需卸下aggregators: [...],當我說刪除您有2個選項,你可以刪除任何在陣列[...]或者你可以簡單地完全消除該對象行(以便消除完全aggregators[...] )。

現在,如果你想要更多的解釋它的工作原理......讓我們給你一些定義,這樣你會更好地理解。聚合是收集在一起形成總量的項目集合。有問題的總數可能是所有字段的總和,您可能定義的平均或其他類型的聚合器。所以基本上這是根據您選擇的列進行重新組合的行爲,並給出了組的計算結果。好吧,它現在如何在SlickGrid的情況下工作?你需要定義你想要使用什麼類型的聚合器(平均,總和等),並將其定義在function groupByParentAndSymbol()之內,定義它們將執行計算但是除非將其附加到該字段,否則將不顯示任何內容,所以在例子中,你發現連接/綁定這個groupTotalsFormatter: sumTotalsFormatter給您的欄定義,例如,它是非常重要的:

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

讓我們回顧一下......一旦聚合器定義new Slick.Data.Aggregators.Sum("cost")它會做計算,但除非它綁定到該字段,否則將不顯示任何內容。作爲一個額外的選項,aggregateCollapsed(真/假)是在摺疊時顯示組內外的小計(平均值,總和或其他)。

+0

我使用總和聚合器來計算總和,而不是行我顯示分組標題行的總和值。 – Boroda

+0

我相信他們是鏈接在一起,如果相信如果你刪除'aggregator:[]'那麼它不會顯示爲空行,但也不會計算..它就像一個捕獲22 ..哈哈 – ghiscoding

+0

只是弄清楚了。 var dataView = new Slick.Data.DataView({groupItemMetadataProvider:groupItemMetadataProviderTrades,displayTotalsRow:false}); displayTotalsRow不應該在選項中(沒有做任何我猜測的,因爲我使用的是dataVIew),而是在dataView初始化中。 – Boroda