Getting Uncaught TypeError: Cannot read property 'uid' of undefined(anonymous function) when trying to bind data to Kendo Grid

Getting Uncaught TypeError: Cannot read property 'uid' of undefined(anonymous function) when trying to bind data to Kendo Grid

我有一个 Kendo 网格,它是在外部 javascript 文件中生成的,并且有数据绑定到它,我得到

Uncaught TypeError: Cannot read property 'uid' of undefined(anonymous function)

我不知道这个 'uid' 是从哪里来的,我一直在单步执行代码,我认为在尝试将返回的数据传递到网格的数据源时出现了错误。 我的网格是这样的(网格确实出现在视图中)

    function ShowAdministratorsGrid() {
    $("#adminGrid").kendoGrid({
        dataSource:[{
            data: GetAdministratorsInformation()
        }],
        columns: [{
            field: "AdministratorName",
            title: "AdministratorName"
        },
        {
            field: "DateCreated",
            title: "DateCreated"
        },
        {
            field: "CreatedBy",
            title: "CreatedBy"
        }],
        Scrollable: true,
        Sortable: true,
        Pageable: [{
            Refresh: true,
            PageSizes: true,
            ButtonCount: 5
        }],
        Selectable: true,
        Events: function (e) {
            e.onRowSelect();
        }
    })
}

数据源数据是这个

    function GetAdministratorsInformation() {
    $.ajax({
        type: "GET",
        url: AddURLParam.AddGetAdminInformationURL,
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function (data, textStatus, jqXHR) {
            GetAdministratorData(data);
        }
    })
}

GetAdministratorData 函数是这样的..

    function GetAdministratorData(admindata) {
    administratorName = admindata.administratorName,
    dateCreated = admindata.dateCreated,
    createdBy = admindata.createdBy
}

我正在获取返回的数据,如您在 ScreenShot1 中所见

如果你看一下 ScreenShot2,我在将返回值添加到 GetAdministratorData 时得到了一个未定义的信息,这是屏幕截图

所以我想这就是为什么我在填充 Kendo 网格时出现错误,有人看到我做错了什么或哪里出了问题吗?

编辑

我缩小了抛出错误的范围..

data 是一个数组。所以您需要通过 admindata[0].administratorName 访问该项目。

或者遍历数组,我真的不知道你想做什么。无论如何,data 是一个数组,(现在)只包含一个对象。

另外,在这一行

dataSource:[{
        data: GetAdministratorsInformation()
}],

GetAdministratorsInformation 实际上并没有 return 任何东西,因为它是一个异步操作。如果要设置数据,则需要在 GetAdministratorsInformation

中的成功回调中进行设置

并且在您的 columns 设置中,字段名称是帕斯卡大小写 AdministratorName 而在数据对象中它们是驼峰大小写 administratorName

回顾一下:

function CreateAdministratorsKendoGrid(administratorData) {
    $("#adminGrid").kendoGrid({
        dataSource:[{
            data: administratorData
        }],
        columns: [{
            field: "administratorName",
            title: "Administrator name"
        },
        {
            field: "dateCreated",
            title: "Date created"
        },
        {
            field: "createdBy",
            title: "Created by"
        }],
        Scrollable: true,
        Sortable: true,
        Pageable: [{
            Refresh: true,
            PageSizes: true,
            ButtonCount: 5
        }],
        Selectable: true,
        Events: function (e) {
            e.onRowSelect();
        }
    })
}

function InitializeAdministratorsGrid() {
    $.ajax({
        type: "GET",
        url: AddURLParam.AddGetAdminInformationURL,
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function (data, textStatus, jqXHR) {
            CreateAdministratorsKendoGrid(data);
        }
    })
}

InitializeAdministratorsGrid();

已解决的问题如下:

var objectDDL = e.container.find("select:eq(0)").data("kendoDropDownList");
var rows = jQuery.makeArray(objectDDL.dataSource.data());
$.each(rows, function (index, value) {
  objectDDL.dataSource.remove(rows[index]);
});