【发布时间】:2016-08-09 14:56:05
【问题描述】:
我需要Kendo Grid 让用户输入“n”个结果,然后单击一个按钮(与网格控件分开),它将获取添加到网格中的所有结果并将它们保存到数据库中。这应该是一项简单的任务,考虑到网格本身没有进行CRUD 操作,除了为数据输入添加额外的空白行...
然而,
问题是网格的内容不是静态的,并且可以根据用户输入的列大小(从 1 到 6)变化(我的示例显示了如何以数组 Lots 的形式表示它) .似乎大多数(如果不是全部)可用的教程似乎只关注静态内容,而在其他方面几乎没有帮助。
到目前为止(来自 Telerik 的一些反馈)我想出了以下...
为数组中的每个Lot 设置一个 Lot Schema 即所有数据的占位符:
var Lots = [];
Lots.push({ ID: 13, LotNumber: "158UL" }),
Lots.push({ ID: 14, LotNumber: "646UE" });
var LotResultsSchema = [];
for (var p = 0; p < Lots.length; ++p) {
LotResultsSchema.push({
Result: {
Count: '',
Mean: '',
SD: ''
}
});
}
设置整体网格Schema Model ID:
var schemaModel = kendo.data.Model.define({
id: "ID",
fields: {
ID: { editable: false, nullable: true },
ResultDateTime: {
type: "date", validation: {
required: true
}
},
LotResults: LotResultsSchema,
StandardComment: {
ID: {
nullable: true, validation: {
required: false
}
},
Description: {
defaultValue: "<empty>",
validation: {
required: false
}
}
},
ReviewComment: {
ID: {
nullable: true, validation: {
required: false
}
},
Description: {
defaultValue: "<empty>",
validation: {
required: false
}
}
}
}
});
根据上述架构为网格设置数据源:
var gridConfigDataSourceAdd = new kendo.data.DataSource({
data: [],
schema: {
model: schemaModel
}
});
设置列模式(再次考虑到可以根据数组大小创建多个列):
var columnSchema = [];
columnSchemaAdd.push({ field: "ResultDateTime", format: "{0:yyyy/MM/dd hh:mm:ss}", editor: dateTimeEditor, title: 'Date Time' });
for (var j = 0; j < Lots.length; ++j) {
columnSchemaAdd.push({
title: Lots[j].LotNumber,
field: Lots[j].ID,
columns: [{
field: "LotResults[" + j + "].Result.Count",
title: 'Count'
}, {
field: "LotResults[" + j + "].Result.Mean",
title: 'Mean'
}, {
field: "LotResults[" + j + "].Result.SD",
title: 'SD'
}]
});
}
columnSchemaAdd.push({ field: "StandardComment", title: 'Comment', editor: standardCommentDropDownEditor, template: "#=StandardComment.Description#" });
columnSchemaAdd.push({ field: "ReviewComment", title: 'Review Comment', editor: reviewCommentDropDownEditor, template: "#=ReviewComment.Description#" });
columnSchemaAdd.push({ command: ["edit", "destroy"] });
设置整体网格:
$("#configAddGrid").kendoGrid({
dataSource: gridConfigDataSourceAdd,
height: 550,
navigatable: true,
autoBind: false,
editable: {
mode: "inline"
},
toolbar: ["create"],
columns: columnSchemaAdd
});
运行此代码并单击“添加新”按钮创建新行会产生以下错误:
未捕获的类型错误:无法读取未定义的属性“结果”
我了解为什么我收到此错误,因为新项目是使用未定义的LotResults 创建的。我无法理解的是,在 Lot Schema 中设置默认值时会发生这种情况。
感谢您的任何建议,我希望有人曾经出于同样的目的使用过 Kendo Grids,因为我真的很想看看一个可行的示例!
【问题讨论】:
标签: javascript jquery asp.net-mvc kendo-grid