我有一个Kendo Grid,目前我们创建数据源为:
var gridDataSource = new kendo.data.DataSource({
transport: {
read: {
url: '@Url.Action("GetData", "Report")',
dataType: "json"
}
},
group: [
{ field: "Name" },
],
pageSize: 20,
serverPaging: false,
serverFiltering: false,
sort: { field: "Date", dir: "desc" },
schema: {
......
model: {
fields: {
Date: { type: "date" },
Name: { type: "string" },
Version: { type: "string" },
Count: { type: "number" }
}
}
}
});
它在Report中调用GetData来获取数据。返回的数据是Class ReportRow的列表,其中包含Date,Name,Version,Count。
在后端,此报告保存在DocumentDB中,GetData确实是:
public async Task<ContentResult> GetData()
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
string json = string.Empty;
try
{
// this json has the time stamp attribute and Rows (array, which is what the grid shows)
json = await _reportRepository.FindDocumentByQueryStringAsync(".....");
if (!string.IsNullOrEmpty(json))
{
// convert the json
....
List<ReportRow> rowList = new List<ReportRow>();
...
{
// parse the json, get results
rowList = reportResults.Rows;
}
...
string ojson = serializer.Serialize(rowList);
return this.Content(ojson, "application/json");
}
}
catch (Exception ex)
{
_log.LogError("...");
}
return this.Content(json, "application/json");
}
当我们显示报告时,我们希望显示报告的时间戳。我的想法是:我们可以在_reportRepository中创建另一个方法来返回报告时间戳,在控制器中调用它并传递给视图。但同事问道:既然我们在GetData中得到了时间戳,有没有办法可以使用它,这样我们就不必更改_reportRepository并再打一次电话了?
所以,我的问题是:如果在GetData中,我们将json直接传递给Kendo网格,我应该如何在gridDataSource中进行更改?我们如何在模式中定义模型?或者,剑道中的模型必须是简单类型,即字符串,数字,日期,......?如果我们可以这样做,我应该在读取事件中更改什么?
我搜索过,但找不到答案。
由于
答案 0 :(得分:2)
我的理解是服务器的响应中会有单个时间戳信息,即这些信息不会显示在每个网格行中。在这种情况下,您的方案将需要使用schema.data
,并且类似于此处的第二个示例:
http://docs.telerik.com/kendo-ui/framework/datasource/crud#read-remote
服务器响应如下所示:
{
"yourTimeStamp": "foo",
"itemCount": 10,
"items": [{
"ProductID": 1,
"ProductName": "Bananas"
},{
"ProductID": 2,
"ProductName": "Pijamas"
}]
}
dataSource配置应如下所示(请注意schema.data
部分):
var dataSource = new kendo.data.DataSource({
transport: {
read: {
url: "url"
}
},
schema: {
data: "items",
total: "itemCount"
}
});
最后一项任务是提取时间戳信息,因为它将在网格行之外使用。这可以通过以下几种方式完成:
requestEnd
事件中schema.parse
函数中
另外,Grid数据项还可以包含具有嵌套字段的对象,如下所示:
http://demos.telerik.com/kendo-ui/grid/editing-custom
(类别字段)