【发布时间】:2015-08-25 08:09:28
【问题描述】:
在显示组摘要值以及从空网格开始或动态向现有网格添加元素时,我在使用 Syncfusion ejGrid 和 knockout.js 时遇到问题。
网格设置:
<div id="Grid" data-bind="ejGrid: {
dataSource: dataSource,
allowGrouping:true,
allowSorting:true,
columns: [{ field: 'OrderID', headerText: 'OrderID' },
{ field: 'CustomerID', headerText: 'CustomerID' },
{ field: 'ShipCity', headerText: 'ShipCity' },
{ field: 'Freight', headerText: 'Freight' },
{ field: 'EmployeeID', headerText: 'EmployeeID' }
],
showSummary: true,
summaryRows: [
{ summaryColumns: [{
summaryType: ej.Grid.SummaryType.Sum,
displayColumn: 'Freight',
dataMember: 'Freight',
prefix: 'Total: '
}],
showCaptionSummary: true,
showTotalSummary: false
}
],
}">
</div>
初始化:
var rows = [{
OrderID: 10248,
CustomerID: "VINET",
ShipCity: "Reims",
Freight: 11.61,
EmployeeID: 4
}, {
OrderID: 10250,
CustomerID: "HANAR",
ShipCity: "Charleroi",
Freight: 65.83,
EmployeeID: 2
}, {
OrderID: 10251,
CustomerID: "VICTE",
ShipCity: "Reims",
Freight: 41.34,
EmployeeID: 1
}, {
OrderID: 10252,
CustomerID: "SUPRD",
ShipCity: "Madrid",
Freight: 51.3,
EmployeeID: 3
}, {
OrderID: 10253,
CustomerID: "HANAR",
ShipCity: "Rio de Janeiro",
Freight: 58.17,
EmployeeID: 3
}];
var source = ko.observableArray(rows);
var gridData = {
dataSource: source
};
ko.applyBindings(gridData);
现在,下面的 jsfiddle 工作正常。也就是说,如果将“CustomerID”列拖到分组区域中,每个组的汇总值(标记为“Total”)会显示得很好:http://jsfiddle.net/zxw5sL2m/1/
现在,如果网格最初为空,然后添加行,则在 ej.web.all-latest.min.js 中使用“TypeError: r is undefined”加载时会失败:http://jsfiddle.net/zxw5sL2m/2/(此外,此如果删除了 knockout.js,该场景将不起作用:http://jsfiddle.net/ymgkf7r9/)
同样,如果网格最初是非空的,然后添加了行,它加载正常,但是当应用分组时,它会失败,并在 ej.web.all-latest 中显示“TypeError: y is null”。 min.js:http://jsfiddle.net/zxw5sL2m/3/
如果不包括组摘要,错误就会消失:http://jsfiddle.net/zxw5sL2m/4/
设置showCaptionSummary: false 排序有效,但是每次添加新行(在任何分组之前)时,也会在底部添加一个新的摘要行,而不是更新现有的摘要行:http://jsfiddle.net/zxw5sL2m/5/
此外,如果网格以一列开始分组,然后添加行,则组会正确更新:http://jsfiddle.net/zxw5sL2m/8/ 但是,如果网格最初未分组,然后稍后分组(通过用户或通过调用gridColumn方法),当新行添加到网格时,分组丢失(虽然奇怪的是组列名称仍然出现在标题的组区域中):http://jsfiddle.net/zxw5sL2m/9/
【问题讨论】:
-
我发现在您的 start-empty 示例中,如果您将
showCaptionSummary设置为 false,则不会出错。 jsfiddle.net/zxw5sL2m/5 也解决了最后一个例子。我无法解释为什么。
标签: javascript knockout.js syncfusion