尽管DataSource中包含数据,但Kendo Grid不会显示任何数据

时间:2017-03-31 12:38:52

标签: kendo-ui grid datasource display

所以,我正在尝试使用显示数据的kendo创建一个readyonly网格,但无论我做什么,数据都不会显示。

The grid looks like this

这是代码:

    $("#Materials")
        .kendoGrid({
            dataSource: {
                data: [],
                schema: {
                    model: {
                        id: "ID",
                        fields: {
                            ID: { type: "number", editable: false },
                            Code: { type: "string", editable: false },
                            Name: { type: "string", editable: false },
                            ExtDeviceCode: { type: "string", editable: false , nullable: true },
                            BaseUomLOVString: { type: "string", editable: false }
                        }
                    }
                },
                pageSize: 20
            },
            filterable: {
                extra: true
            },
            pageable: true,
            columns: [
                { field: "Code", title:"Code"},
                { field: "Name", title: "Name"},
                { field: "ExtDeviceCode", title:"External device code"},
                { field: "BaseUomLOVString", title: "UnitsOfMeasure" }
            ],
            editable: false
        });

这使得一个没有数据的空网格,我稍后用Ajax调用填充。从上图可以看出,网格包含数据,但不显示。 dataSource looks like this.内的数据或Json:

[{
    "ID": 21150,
    "Code": "3",
    "ExtDeviceCode": null,
    "Name": "Avio benzin",
    "BaseUomLOVString": "Kilogram"
}, {
    "ID": 21400,
    "Code": "5003",
    "ExtDeviceCode": null,
    "Name": "Bencin 95",
    "BaseUomLOVString": "Litre"
}]

编辑1 :我正在用这样的Ajax调用填充数据:

            $.ajax({
                url: '@SimpleUrlHelper.UrlObjectToRoot(Url)/FuelPointMaterialTankMask/LookupMaterials',
                data: {
                    //Send list of IDs
                    'materialIDs': materialList
                },
                type: "POST",
                success: function (response) {

                    var tmp = [];
                    if (typeof response !== "undefined" && 
                    response !== null) {
                        response.forEach(function(item) {
                            tmp.push(item);
                        });
                    }
                    grid = $("#Materials").data("kendoGrid");
                    originalMaterialDataSource = grid.dataSource;
                    originalMaterialDataSource.data(tmp);
                    originalMaterialDataSource._destroyed = [];
                    originalMaterialDataSource.pageSize(pageSize);
                    originalMaterialDataSource.page(1);
                    originalMaterialDataSource._total = tmp.length;
                    grid.pager.refresh();
                }
            });

2 个答案:

答案 0 :(得分:0)

您可以在ajax调用后在dataSource中设置数据。

var dataArray = [{
    "ID": 21150,
    "Code": "3",
    "ExtDeviceCode": null,
    "Name": "Avio benzin",
    "BaseUomLOVString": "Kilogram"
}, {
    "ID": 21400,
    "Code": "5003",
    "ExtDeviceCode": null,
    "Name": "Bencin 95",
    "BaseUomLOVString": "Litre"
}];

使用.data()设置:

$("#Materials").data('kendoGrid').dataSource.data(dataArray );

答案 1 :(得分:0)

好的,所以经过几天试图弄清楚出了什么问题后,我终于找到了答案。

我的某些地方:

var grids = $('.k-grid');
for (var i = 0; i < grids.length; i++) {
        ....
grid.dataSource.filter().filters[0] = {
       logic: "or",
       filters: filters
}
        ....

所以基本上我在不排除这个网格的情况下对所有网格进行过滤,这只是我的一个错误。