在 jQgrid 中加载本地 JSON 数据,无需 AddJsonRows

2024-03-30

我正在使用 addJsonRows 方法将本地数据添加到 jQgrid。由于此方法禁用排序,我需要另一个解决方案。一个限制:我无法设置 url 并从服务器获取数据,因为数据是通过另一个组件传递的。

下面的片段揭示了这个案例。注释行显示了限制,我通过定义局部变量来替换它以具有测试用例。

<script type="text/javascript" language="javascript">
    function loadPackageGrid() {
    // Get package grid data from hidden input.
    // var data = eval("("+$("#qsmId").find(".qsm-data-packages").first().val()+")");
        var data =  {
            "page": "1",
            "records": "2",
            "rows": [
                { "id": "83123a", "PackageCode": "83123a" },
                { "id": "83566a", "PackageCode": "83566a" }
            ]
        };

        $("#packages")[0].addJSONData(data);
    };

    $(document).ready(function() {
        $("#packages").jqGrid({
            colModel: [
                { name: 'PackageCode', index: 'PackageCode', width: "110" },
                { name: 'Name', index: 'Name', width: "300" }
            ],
            pager: $('#packagePager'),
            datatype: "local",
            rowNum: 10000,
            viewrecords: true,
            caption: "Packages",
            height: 150,
            pgbuttons: false,
            loadonce: true
        });
    });
</script>

我想知道如何以其他(更好)的方式做到这一点以保持排序功能。 我尝试了一些数据选项,但没有结果。


我想其他人也会对同样的问题感兴趣。所以我对这个问题+1。

您至少可以通过两种方式解决该问题。您可以使用的第一个数据类型:“jsonstring” http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#json_string and datastr: data。如果您需要添加附加参数jsonReader: { repeatitems: false }.

第二种方法是使用datatype: "local" and data: data.rows。在这种情况下本地阅读器 http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#array_data将用于读取数据data.rows大批。默认localReader可以读取数据。

对应的demo是here http://www.ok-soft-gmbh.com/jqGrid/AddJsonData.htm and here http://www.ok-soft-gmbh.com/jqGrid/AddJsonData1.htm.

我修改了一些您的数据:填充“名称”列并在输入数据中包含第三项。

现在您可以使用本地分页、排序和过滤/搜索数据。我添加了更多代码来演示这些功能。下面是演示中的代码:

$(document).ready(function () {
    'use strict';
    var data = {
            "page": "1",
            "records": "3",
            "rows": [
                { "id": "83123a", Name: "Name 1", "PackageCode": "83123a" },
                { "id": "83432a", Name: "Name 3", "PackageCode": "83432a" },
                { "id": "83566a", Name: "Name 2", "PackageCode": "83566a" }
            ]
        },
        grid = $("#packages");

    grid.jqGrid({
        colModel: [
            { name: 'PackageCode', index: 'PackageCode', width: "110" },
            { name: 'Name', index: 'Name', width: "300" }
        ],
        pager: '#packagePager',
        datatype: "jsonstring",
        datastr: data,
        jsonReader: { repeatitems: false },
        rowNum: 2,
        viewrecords: true,
        caption: "Packages",
        height: "auto",
        ignoreCase: true
    });
    grid.jqGrid('navGrid', '#packagePager',
        { add: false, edit: false, del: false }, {}, {}, {},
        { multipleSearch: true, multipleGroup: true });
    grid.jqGrid('filterToolbar', { defaultSearch: 'cn', stringResult: true });
});

UPDATED:我决定添加更多关于之间差异的细节datatype: "jsonstring" and datatype: "local"场景,因为旧答案被许多读者阅读和投票。

我建议稍微修改一下上面的代码以更好地显示差异。第一个代码使用datatype: "jsonstring"

$(function () {
    "use strict";
    var data = [
            { id: "10", Name: "Name 1", PackageCode: "83123a", other: "x", subobject: { x: "a", y: "b", z: [1, 2, 3]} },
            { id: "20", Name: "Name 3", PackageCode: "83432a", other: "y", subobject: { x: "c", y: "d", z: [4, 5, 6]} },
            { id: "30", Name: "Name 2", PackageCode: "83566a", other: "z", subobject: { x: "e", y: "f", z: [7, 8, 9]} }
        ],
        $grid = $("#packages");

    $grid.jqGrid({
        data: data,
        datatype: "local",
        colModel: [
            { name: "PackageCode", width: 110 },
            { name: "Name", width: 300 }
        ],
        pager: "#packagePager",
        rowNum: 2,
        rowList: [1, 2, 10],
        viewrecords: true,
        rownumbers: true,
        caption: "Packages",
        height: "auto",
        sortname: "Name",
        autoencode: true,
        gridview: true,
        ignoreCase: true,
        onSelectRow: function (rowid) {
            var rowData = $(this).jqGrid("getLocalRow", rowid), str = "", p;
            for (p in rowData) {
                if (rowData.hasOwnProperty(p)) {
                    str += "propery \"" + p + "\" + have the value \"" + rowData[p] + "\n";
                }
            }
            alert("all properties of selected row having id=\"" + rowid + "\":\n\n" + str);
        }
    });
    $grid.jqGrid("navGrid", "#packagePager",
        { add: false, edit: false, del: false }, {}, {}, {},
        { multipleSearch: true, multipleGroup: true });
    $grid.jqGrid("filterToolbar", { defaultSearch: "cn", stringResult: true });
});

它显示(参见the demo http://www.ok-soft-gmbh.com/jqGrid/AddJsonData_.htm)

有人能看见unsorted项目的顺序与输入数据相同。输入数据的项目将保存在内部参数中data and _index. getLocalRow方法中使用的onSelectRow显示内部项目data仅包含名称对应的输入项的属性name一些 jqGrid 列的属性。另外不需要的_id_将添加属性。

另一方面下一个演示 http://www.ok-soft-gmbh.com/jqGrid/AddJsonData1_.htm它使用datatype: "local"显示sorted数据和所有属性(包括复杂对象)仍将保存在内部data:

上一个演示中使用的代码如下:

$(function () {
    "use strict";
    var data = [
            { id: "10", Name: "Name 1", PackageCode: "83123a", other: "x", subobject: { x: "a", y: "b", z: [1, 2, 3]} },
            { id: "20", Name: "Name 3", PackageCode: "83432a", other: "y", subobject: { x: "c", y: "d", z: [4, 5, 6]} },
            { id: "30", Name: "Name 2", PackageCode: "83566a", other: "z", subobject: { x: "e", y: "f", z: [7, 8, 9]} }
        ],
        $grid = $("#packages");

    $grid.jqGrid({
        data: data,
        datatype: "local",
        colModel: [
            { name: "PackageCode", width: 110 },
            { name: "Name", width: 300 }
        ],
        pager: "#packagePager",
        rowNum: 2,
        rowList: [1, 2, 10],
        viewrecords: true,
        rownumbers: true,
        caption: "Packages",
        height: "auto",
        sortname: "Name",
        autoencode: true,
        gridview: true,
        ignoreCase: true,
        onSelectRow: function (rowid) {
            var rowData = $(this).jqGrid("getLocalRow", rowid), str = "", p;
            for (p in rowData) {
                if (rowData.hasOwnProperty(p)) {
                    str += "propery \"" + p + "\" + have the value \"" + rowData[p] + "\"\n";
                }
            }
            alert("all properties of selected row having id=\"" + rowid + "\":\n\n" + str);
        }
    });
    $grid.jqGrid("navGrid", "#packagePager",
        { add: false, edit: false, del: false }, {}, {}, {},
        { multipleSearch: true, multipleGroup: true });
    $grid.jqGrid("filterToolbar", { defaultSearch: "cn", stringResult: true });
});

所以我建议使用datatype: "local"代替datatype: "jsonstring". datatype: "jsonstring"仅在某些非常特定的情况下才有一些优势。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 jQgrid 中加载本地 JSON 数据,无需 AddJsonRows 的相关文章

  • 在jqgrid的列中添加图像

    我想在 jqgrid 的第一列中显示一个小图像 以显示从数据库获取的所有数据 jquery tableName jqgrid colNames colModel width 25 name someValue index somevalue
  • jqgrid 更改单元格值并保持编辑模式

    我在网格中使用内联编辑 在某些情况下我想更改列内单元格的值 我用 setCell 更改它 效果很好 我的问题是 更改后 单元格失去了编辑模式 而该行的所有其他单元格都处于编辑模式 我想在更改单元格后将其保持在编辑模式 现在我所做的是保存该行
  • onSelectRow 中的 jqGrid 行对象

    如何获取 jqGrid 中选定行上的行对象 我需要实际的对象 而不是单元格值 我已阅读文档 但找不到可以为我提供行对象的方法 由于我使用自定义格式化程序 因此 cellValue 将不起作用 如果你实施自定义格式化程序 http www t
  • 在 jQgrid 中加载本地 JSON 数据,无需 AddJsonRows

    我正在使用 addJsonRows 方法将本地数据添加到 jQgrid 由于此方法禁用排序 我需要另一个解决方案 一个限制 我无法设置 url 并从服务器获取数据 因为数据是通过另一个组件传递的 下面的片段揭示了这个案例 注释行显示了限制
  • 如何使用Struts2 Jquery插件实现过滤器搜索

    我正在尝试为我的 Struts2 jquery 网格实现过滤器搜索 如果我搜索任何字符串 通过 jquery 过滤器文本框 那么它会调用我的操作类 但我无法在我的操作类中获取搜索字符串 我尝试在我的 Action 类中打印此行 但搜索字符串
  • jqgrid添加后如何清除添加表单中的自动完成框内容

    jqGrid 添加表单包含使用以下代码的自动完成框 如果新行添加到 jqgrid 自动完成字段不会被清除 仍然显示添加的行内容 简单的文本框列已正确清除 如何清除自动完成框 var grid grid grid jqGrid url Get
  • JqG​​rid 搜索字段的多个文本框

    我想知道 JqGrid 高级搜索是否可以为我想要搜索的某些字段显示多个文本框 例如 如果我有一个 电话号码 字段 我希望能够可视化 2 个框 一个用于区号 另一个用于电话号码的其余部分 然后按 查找 后 我希望能够获取两个值并将它们合并或执
  • jqGrid - 是否可以过滤 colModel 中 jsonmap 的值

    我正在使用 jqGrid 想知道 jqGrid 的 colModel 中的 jsonmap 的值是否可以具有过滤值 ColModel colModel name fname index action jsonmap cells cell c
  • 根据 JQGRID 中的条件编辑行

    在 JQGRID 中使用表单编辑 我用不同的颜色显示行 红色 无法编辑行 黑色 可以编辑行 1 Option 当用户单击编辑按钮并且所选行为红色时 应显示消息记录 无法编辑 2 选项 如果用户选择了黑色标记的可编辑行 用户可以编辑该行 但是
  • jqGrid treeGrid 捕获展开折叠事件

    我使用 jqGrid 来构建一些大树 现在我想记住cookie中展开和折叠的节点 所以我想捕捉展开和折叠事件 我在手册中找不到它 所以我用这种方式解决了 grid find div treeclick bind click function
  • 如何在导航栏 jqgrid 上添加第二个自定义删除按钮?

    我已经在使用默认删除按钮进行自定义操作 在服务器端它在删除之前复制行 我想知道如何创建第二个删除按钮 将删除操作发送到不同的 url 以便在数据库的表上删除 我不想更改当前服务器端代码上的任何内容 只想为从此按钮发送的删除操作创建新代码 我
  • 删除记录时找不到元素

    JqG rid 4 6 一切正常 唯一的问题是 当我打开 Firefox 调试器并转到控制台时 如果我删除一条记录 单击垃圾桶图标 然后弹出删除对话框 单击删除按钮并刷新页面等 调试器会警告我 没有找到元素 可能的脚本是 gridSelec
  • 当我使用 gridview:true 时, afterInsertRow : function(ids) 方法不执行

    当我设定gridview to true gridview true 在我们的jqGrid中增加jqGrid的性能 方法如下插入行后 或者其他类似的方法不被执行 以下是我的jgGrid的代码 jQuery displaylistGrid j
  • 在 MVC 应用程序中显示 jqGrid 页脚行中的数据

    我需要帮助在 jqGrid 页脚行中显示数据 这是我在服务器上的配置 注意用户数据 小时 line Format the data for the jqGrid var jsonData new total totalPages page
  • 为什么 Jqgrid 冻结列似乎不能与过滤器行和过滤器标题一起使用?

    我无法让冻结列与 jqgrid 4 3 0 一起使用 我唯一能想到的是我有一些不是开箱即用的具体东西 我在顶部使用过滤行 我使用 cloneToTop true 显示网格顶部的所有按钮 我有以下代码 用于在 jqggrid 顶部显示过滤器状
  • 如何使用 JqGrid 子网格进行内联编辑?

    我知道如何使用主网格进行内联编辑 但是有没有办法对子网格进行内联编辑 这是我的 JS 文件 function var lastsel list jqGrid url example php postData q 1 datatype jso
  • 如何使整个 jqGrid 禁用/只读

    如何使整个 jqGrid 禁用 只读 我有一个带有逻辑 编辑部分 的页面 当用户选择要编辑的内容时显示该页面 并在用户完成编辑 保存或取消 时隐藏该页面 显示编辑部分时 我禁用了页面上的几个其他元素 我想禁用他们在 jqGrid 中单击的能
  • 如何在 jQgrid 中隐藏列但在添加/编辑面板中显示此列

    我想要一种我使用的控制形式 但字段数量太高了 如何显示网格 但只有表单添加 编辑弹出面板中的某些字段显示所有字段 以下是您可以执行此操作的方法 colModel name email label E mail editable true h
  • 如何使用 jqGrid 在查询字符串周围添加单引号

    我在用着jqGrid向用户显示一些数据 我希望这个网格可以排序 但是 jqGrid 发送的数据并不完全是我需要的 这是 jqGrid 现在发送的查询字符串 http local MyService svc GetData search fa
  • jqgrid长文本换行

    在jqgrid中 我们从数据库获取长文本 但在JQgrid中显示时需要换行 有什么方法可以换行长文本 没有任何空格 我们只有 110px 的空间用于收款人姓名字段 因为我们有多个列需要显示 我们的代码就像 name firstPayeeNa

随机推荐

  • 家长/孩子同桌

    我有如下表结构 id parent name value 1 0 aaa 2 0 bbb 3 0 ccc 4 1 111 5 1 222 6 3 333 如果父记录有子记录 我想显示父记录 Like 父代 ID 名称 第一个子代的值 1 a
  • 如何在 CodeIgniter 中使用准备好的语句

    大家好 我需要在我的网站中使用准备好的语句 我尝试使用这个 sql SELECT FROM tbl user WHERE uid id and activation key key query this gt db gt query sql
  • 实体框架查找与何处

    之间是否存在显着差异 Find id and Where x gt x Id id 这应该迫使我使用 Find over Where First 我会想象 Find 会更有效 但是我应该避免这样做吗 Where First 我问的原因是我在
  • 项目GUID不断变化

    我们有一个 VS2008 解决方案 我注意到发生了一些奇怪的事情 某些项目引用同一解决方案中定义的其他项目 作为项目引用添加 这是前一段时间完成的 直接从 VS 构建效果很好 从 MSBUILD 构建失败 我已删除项目引用并重新添加它 并且
  • npm install 与 sudo npm install -g

    对于某些包我必须运行sudo npm install g而对于其他人npm install就足够了 为什么以及有什么区别 例如 npm install g grunt cli doesn t work sudo npm install g
  • 无法使用 JavaScript 选择最接近的 h2 元素

    我希望能够选择与包含披萨选择选项的字段集最接近的 h2 标题 并使用 jQuery 设置标题的文本 到目前为止我还无法做到这一点 HTML div fieldset fieldset div
  • Breeze 和 Knockout 中的验证

    我最近使用 Knockout 和 ASP NET MVC4 将 Breeze 添加到项目中 我真的很喜欢 Breeze 它节省了大量的编码工作 我使用过 Knockout 验证 喜欢它如何验证数据输入时的属性字段文本框以及错误消息的显示方式
  • Laravel - 捕获 cURL 异常的正确方法

    我正在使用 cURL 构建一个简单的 REST API 包 并希望捕获错误然后返回视图 如果我 dd e 我可以抛出错误 但如果我尝试返回一个视图 它只会继续执行 catch 函数之后的代码 PHP 不应该终止进程并直接进入登录视图吗 tr
  • 在 Rubymine 中运行 Rails 时找不到图像

    当我尝试在 Rubymine 中运行一些 Rails 命令时 出现以下错误 我最近更改了一些权限以使一些符号链接正常工作 尽管这可能不相关 例如当我跑步时rails c我收到此类错误 RAILS GROUPS is unset defaul
  • ruby on Rails + xampp + mysql (Windows 7)

    我正在尝试在 Windows 7 上将 xampp 中包含的 mysql 包与 ruby on Rails 一起使用 但似乎无法让它们一起工作 我有 Rails 3 0 0 和 xampp 1 7 3 Rails 在 xampp 中与 sq
  • 使用Python Mock库来监视内部方法调用

    我正在使用 Python 模拟模块进行测试 我想监视活动对象发出的内部方法调用 我发现 wraps kwarg 可用于设置一个模拟来监视对活动对象的方法调用 使用 Python 模拟来监视对现有对象的调用 https stackoverfl
  • 有谁在 PyCharm 中拥有以下库的“文档 URL”:

    我是 PyCharm 和其他 Jetbrains IDE 的 快速文档 功能的粉丝 但它需要知道每个库的特定 文档 URL 该功能在Preferences gt Tools gt Python External Documentation设
  • 识别 WCF 服务中的客户端

    我有一个工作双工 WCF 服务WSDualHttpBinding 我的问题是找到一种方法来存储具有唯一 ID 的回调通道 该服务旨在长期运行 我可以简单地抓住OperationContext Current GetCallbackChann
  • 如何将参数传递给 HttpInterceptor?

    我正在使用 Angular 4 3 1 和 HttpClient 有一个 HttpInterceptor 来设置一些标头 在某些 http get 请求中 我需要设置不同的标头 无论如何 我可以将一些参数传递给该特定 HttpRequest
  • 如何滚动到页面中间(50%)

    如果不使用流行的scrollTo插件 我如何滚动到页面 div的垂直中间 50 这会将 div 的地狱卷轴滚动到其垂直中间 var myDiv yourdiv var scrollto myDiv offset top myDiv heig
  • 为什么要使用 Handlers 而 runOnUiThread 会做同样的事情?

    我都遇到过Handlers http developer android com reference android os Handler html and 在UiThread上运行 http developer android com r
  • SMT中量化算术推理的局限性是什么?

    我在以下看似微不足道的基准测试中尝试了几种 SMT 求解器 CVC3 CVC4 和 Z3 set logic LIA set info smt lib version 2 0 assert forall x Int forall y Int
  • 如何将反斜杠参数传递给脚本?

    我只想在文本文件中附加用户输入参数 我正在使用以下命令 echo 2 gt gt db txt 2希望用户设置如下路径 D Projects MyProject 它写入文件 但不带反斜杠 结果是 D 项目我的项目 我找不到任何地方可以解决这
  • Android 从后台弹出带有动画的片段

    我有一个在其中加载片段 A 的活动 片段 A 包含 ListView 当单击列表项时 我加载另一个片段 B 代替片段 A 以显示列表视图项详细信息 单击按钮并按下设备后退按钮时 它会加载上一个片段 即显示 ListView 的片段 A 所有
  • 在 jQgrid 中加载本地 JSON 数据,无需 AddJsonRows

    我正在使用 addJsonRows 方法将本地数据添加到 jQgrid 由于此方法禁用排序 我需要另一个解决方案 一个限制 我无法设置 url 并从服务器获取数据 因为数据是通过另一个组件传递的 下面的片段揭示了这个案例 注释行显示了限制