我有一个带有动态列的多维数据源,如下所示:
{
TaskName: "Sample",
Oct12018: {
Assigned: 2,
Completed: 0
},
Oct22018: {
Assigned: 2,
Completed: 2
},
... and so on.
这就是我创建数据的方式: 我动态创建日期列。
$.each(groupedData, function (col, val) {
if (property != 'DateFormat' && property != 'Date') {
schedule[i] = {};
}
for (var j = 0; j < val.length; j += 1) {
var currentItem = val[j]
var property = Object.keys(currentItem)[i];
schedule[i]["TaskDescription"] = currentItem.TaskDescription;
//schedule[i][currentItem.DateFormat] = currentItem["Assigned"];
for (var x = 0; x <= 2; x++) {
schedule[i][currentItem.DateFormat] = {};
schedule[i][currentItem.DateFormat]["Assigned"] = currentItem["Assigned"];
schedule[i][currentItem.DateFormat]["Completed"] = currentItem["Completed"];
//schedule[i]["Completed"] = currentItem["Completed"];
}
}
i += 1;
});
现在我想知道如何将其放在我的剑道网格上。
为了让网格正确处理动态列,您必须在实例化网格之前定义它们。如果您事先没有数据,则可以通过销毁网格然后使用添加到 columns 属性的列来重建网格来解决此问题。
编辑:
Kendo-ui 向您显示 [object][object],当您尝试将 jsObject 解析为字符串时,例如调用
时会发生这种情况JSON.stringify(data[i]) // data[i] = { actualData: "hi i am right", actualId: 0 }
而不是
JSON.stringify(data[i].actualData) // data[i].actualData = "hi i am right"
尝试找到解析错误,您的网格应该可以再次工作!
旧答案:
当您像定义 kendo ui 网格条目一样创建元素时,您可以调用
var grid = $("#grid").data("kendoGrid");
grid.dataSource.add(yourElements);
感谢您的回答,我能够将网格与动态列相匹配。
function generateColumns(sampleDataItem) {
var columnNames = Object.keys(sampleDataItem[0]);
return columnNames.map(function (name) {
return {
field: name,
width: 200,
title: name,
}}