在jqGrid中显示外键文本

问题描述

| 我有一个绑定到JSON数据源(WCF Web服务)的jqGrid。 WCF方法返回ID列表。以下是返回的JSON的示例。如您所见,这是用户与角色的分支之间的关系,即用户在不同的分支中可以具有不同的角色。
    [{\"entityHashCode\":null,\"BranchId\":25,\"SysRoleId\":1,\"SysUserId\":1},{\"entityHashCode\":null,\"SysRoleId\":2,\"BranchId\":26,\"SysUserId\":1]
在jqGrid中显示此数据很好,但显然我想向用户显示分支和角色名称,而不是其ID。不幸的是,更改WCF以使其以JOINS的形式返回数据不是一种选择,因为WCF方法可能不会更改。 我还可以访问2个Web服务方法GetBranches和GetRoles,这两个方法均返回具有完整详细信息的数组-我必须将这些信息存储到的javascript数组中。 有没有一种方法可以告诉jqGrid绑定到我的原始数组,但又以某种方式告诉它从不同的数据源(GetBranches和GetRoles数组)获取分支和角色名称?     

解决方法

        我与LeftyX进行的对话让我感到困惑,在jqGrid中似乎并不是一种本机的方法,因此我创建了一种在数组中的对象之间执行\“ JOIN \”的方法。功能如下:
function joinJSONFK (entities,fkProperties,fkLookupArrays) {

    function findValInAry(ary,idfield,value) {
        for (var i = 0; i < ary.length; i++) {
            if (value == ary[i][idfield]) {
                return ary[i];
            }
        }
        return null;
    };

    function applyFKProperties(entity,fkLookupArrays) {
        for (var i = 0; i < fkProperties.length; i++) {
            entity[fkProperties[i] + \"Source\"] = findValInAry(fkLookupArrays[i],fkProperties[i],entity[fkProperties[i]]);
        }
        return entity;
    }

    var entityary = [];
    if (!entities instanceof Array) {
        entities = applyFKProperties(entities);
        return entities[0];
    }
    else {
        for (var i = 0; i < entities.length; i++) {
            entities[i] = applyFKProperties(entities[i],fkLookupArrays);
        }
        return entities;
    }
}
您将按以下方式使用它:
userRoleData = joinJSONFK(result,[\"SysRoleId\",\"BranchId\"],[GlobalRoles,GlobalBranches]); 
其中“结果”是具有以下格式的JSON对象数组:
[{\"entityHashCode\":null,\"BranchId\":25,\"SysRoleId\":1,\"SysUserId\":1},{\"entityHashCode\":null,\"SysRoleId\":2,\"BranchId\":26,\"SysUserId\":1]
而[\“ SysRoleId \”,\“ BranchId \”]是需要\“ JOINED \”的外键的数组,而[GlobalRoles,GlobalBranches]是一个包含外来\“ lookup \”数据的数组键。 GlobalRoles看起来像这样:
[{\"Name\":\"Admin\",\"Description\":\"Some description\"},{\"Name\":\"Role 2\",{\"Name\":\"A new role\",\"SysRoleId\":3,{\"Name\":\"Another Role\",\"SysRoleId\":4,\"Description\":\"Some description\"}]
GlobalBranches看起来像这样:
[{\"BranchName\":\"Branch 25\",\"Description\":\"describe the branch\"},{\"BranchName\":\"Branch 26\",{\"BranchName\":\"Branch 27\",\"BranchId\":27,\"Description\":\"describe the branch\"}]
调用函数后,\“ userRoleData \”将显示如下内容:
[{\"entityHashCode\":null,\"SysUserId\":1,\"SysRoleIdSource\":{\"Name\":\"Admin\",\"BranchIdSource\":{\"BranchName\":\"Branch 25\",\"Description\":\"describe the branch\"}},\"SysRoleIdSource\":{\"Name\":\"Role 2\",\"BranchIdSource\":{\"BranchName\":\"Branch 26\",\"Description\":\"describe the branch\"}}]
这种方式可以很好地组织对象。     ,        为什么不只在WCF方法中调用
GetBranches
GetRoles
并构建所有匹配项(关系),生成一个包含
BranchId,BranchName,SysRoleId,SysRoleName,SysUserId
的新数组(列表)对象? 您只需一次调用就可以将新的List of返回到​​jqGrid。这样会更快,更容易实现。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...