This is a migrated thread and some comments may be shown as answers.

serverGrouping cannot load

0 Answers 144 Views
Grid
This is a migrated thread and some comments may be shown as answers.
faris
Top achievements
Rank 1
faris asked on 02 Oct 2012, 02:38 AM
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.

{"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

No answers yet. Maybe you can help?

Tags
Grid
Asked by
faris
Top achievements
Rank 1
Share this question
or