hello
i tried to use serverGrouping, but i still got this error
error: Uncaught TypeError: Cannot read property 'length' of undefined
here is my json.
full code in html
can someone help me how solve this error?
maybe the problem is schema
thank you
i tried to use serverGrouping, but i still got this error
error: Uncaught TypeError: Cannot read property 'length' of undefined
here is my json.
{"data":[{"Key":"Azure Getting Started","HasSubgroups":false,"Items":[{"Name":"Azure Getting Started","Price":540.00,"Self":"api/books/3","Id":3},{"Name":"Azure Getting Started","Price":150.00,"Self":"api/books/5","Id":5}],"Aggregates":{"Price":{"Sum":690.00,"Min":150.00,"Max":540.00},"Name":{"Count":2}},"Subgroups":[]},{"Key":"Entity FrameWork","HasSubgroups":false,"Items":[{"Name":"Entity FrameWork","Price":350.00,"Self":"api/books/2","Id":2}],"Aggregates":{"Price":{"Sum":350.00,"Min":350.00,"Max":350.00},"Name":{"Count":1}},"Subgroups":[]}],"total":5,"aggregates":{"Price":{"Sum":1810.00,"Min":150.00,"Max":550.00},"Name":{"Count":5}}}
full code in html
var grid = $("#ordersGrid").kendoGrid({
// specify the columns on the grid
toolbar: ["create"],
columns: [
{ field: "Name", title: "Name", width: "100px" },
{ field: "Price", title: "Price", width: "100px", aggregates: ["Min", "Max", "Sum"], footerTemplate: "Sum:#=Sum# Min:#=Min# Max:#=Max#", groupFooterTemplate: "Sum: " },
{ command: ["edit", "destroy"], title: " ", width: "210px" }
],
// the datasource for the grid
dataSource: new kendo.data.DataSource({
// the transport tells the datasource what endpoints
// to use for CRUD actions
transport: {
read: {
url: "/apibook/readget",
type: "POST"
},
update: {
url: "/apibook/update",
type: "POST"
},
destroy: {
url: "/apibook/destroy",
type: "POST"
},
create: {
url: "/apibook/create",
type: "POST"
},
parameterMap: function (options, operation) {
if (operation != "read") {
var result = {};
for (var i = 0; i < options.models.length; i++) {
var book = options.models[i];
debugger;
for (var member in book) {
result["books[" + i + "]." + member] = book[member];
}
}
return result;
}
if (operation == "read") {
var result = {};
result["take"] = options.take;
result["skip"] = options.skip;
result["page"] = options.page;
if (options.sort != null) {
for (var i = 0; i < options.sort.length; i++) {
result["sort[" + i + "]." + "dir"] = options.sort[i].dir;
result["sort[" + i + "]." + "field"] = options.sort[i].field;
}
}
if (options.aggregate != null) {
var aggregates = "";
debugger;
for (var i = 0; i < options.aggregate.length; i++) {
if (aggregates == "") {
aggregates = options.aggregate[i].field + "-" + options.aggregate[i].aggregate;
}
else
aggregates += "~" + options.aggregate[i].field + "-" + options.aggregate[i].aggregate;
}
result["aggregates"] = aggregates;
//for (var i = 0; i < options.aggregate.length; i++) {
// result["aggregate[" + i + "]." + "aggregate"] = options.aggregate[i].aggregate;
// result["aggregate[" + i + "]." + "field"] = options.aggregate[i].field;
//}
}
result["groupBy"] = "Name-asc";
if (options.filter != null) {
var filter = options.filter;
if (filter.filters != null) {
for (var i = 0; i < filter.filters.length; i++) {
result["filter[" + i + "].field"] = filter.filters[i].field;
result["filter[" + i + "].op"] = filter.filters[i].operator;
result["filter[" + i + "].value"] = filter.filters[i].value;
}
}
}
return result;
}
}
},
group: {
field: "Name",
aggregates: [
{ field: "Price", aggregate: "sum" },
{ field: "Price", aggregate: "min" },
{ field: "Price", aggregate: "max" },
]
},
aggregate: [
{ field: "Price", aggregate: "sum" },
{ field: "Price", aggregate: "min" },
{ field: "Price", aggregate: "max" },
{ field: "Name", aggregate: "count" }],
// the schema defines the schema of the JSON coming
// back from the server so the datasource can parse it
schema: {
// the array of repeating data elements (employees)
data: function (response) {
debugger;
//return response.Data.Items;
return response.data;
},
groups: function (response) {
debugger;
//return response.Data.Items;
return response.data;
},
aggregates: function (response) {
if (response.aggregates != null)
return response.aggregates;
else
return {};
},
model: {
id: "Id",
fields: {
// specify all the model fields, along with validation rules and whether or
// not they can be edited or nulled out.
Id: { editable: false, nullable: true },
Name: { editable: true },
Price: { editable: true, nullable: false, validation: { required: true } },
}
},
// the total count of records in the whole dataset. used
// for paging.
total: "Count",
},
// the number of records to show per page
pageSize: 3,
// do paging on the server
serverPaging: true,
// do sorting on the server
serverSorting: true,
serverAggregates: true,
serverGrouping:true,
batch: true
}),
// paging is enabled in the grid
pageable: true,
// editing happens inline, one row at a time.
editable: "popup",
selectable: true,
// sort by multiple columns
sortable: {
mode: "multiple"
},
change: function (e) {
// get the current item selected in the grid
var employee = this.dataSource.getByUid(this.select().data("uid"));
// write out the employee id
console.log(employee.id);
}
}).data("kendoGrid");
can someone help me how solve this error?
maybe the problem is schema
thank you