【问题标题】:Sorting of jqGrid (v4.1.2) treegrid not working with Ajacency ModeljqGrid(v4.1.2)treegrid的排序不适用于邻接模型
【发布时间】:2011-11-11 22:25:25
【问题描述】:

我一直在使用 jqGrid,并且有一些关于邻接模型的 useful questionsanswers,除了排序之外,我已经得到了所有我需要的东西。

这个问题实际上是在上面的答案链接中复制的。任何人都可以看到需要修复的内容吗? Oleg 似乎是这方面的专家!

我已经尝试过question 中的选项,但我认为当前版本(4.1.2)可能有新错误?请证明我错了。

我还看到http://trirand.com/blog/jqgrid/jqgrid.html 上的示例> 3.4 中的新功能> 树网格邻接模型有效,但该示例未使用loaded:true 属性,如本问题的first referenced answer 中所述

【问题讨论】:

    标签: javascript jquery sorting jqgrid treegrid


    【解决方案1】:

    你是对的。这是我之前关于

    的回答中的数据中的小错误

    经过一些调试,我发现错误很简单:应该在数据中使用parent: "null"parent: null而不是parent: ""

    此外,您必须在网格中定义 sorttype 参数才能正确排序文本以外的任何数据。

    你怎么看the modified demo现在支持正确的本地排序:

    首先将按所选列对根元素进行排序,然后递归地对其所有子元素进行排序。

    为了便于在搜索引擎中找到新代码,我将演示的代码包含在下面:

    var mydata = [
            {id: "1", name: "Cash",        num: "100", debit: "400.00",  credit: "250.00",  balance: "150.00",   enbl: "1", level: "0", parent: "null", isLeaf: false, expanded: false, loaded: true},
            {id: "2", name: "Cash 1",      num: "1",   debit: "300.00",  credit: "200.00",  balance: "100.00",   enbl: "0", level: "1", parent: "1",    isLeaf: false, expanded: false, loaded: true},
            {id: "3", name: "Sub Cash 1",  num: "1",   debit: "300.00",  credit: "200.00",  balance: "100.00",   enbl: "1", level: "2", parent: "2",    isLeaf: true,  expanded: false, loaded: true},
            {id: "4", name: "Cash 2",      num: "2",   debit: "100.00",  credit: "50.00",   balance: "50.00",    enbl: "0", level: "1", parent: "1",    isLeaf: true,  expanded: false, loaded: true},
            {id: "5", name: "Bank\'s",     num: "200", debit: "1500.00", credit: "1000.00", balance: "500.00",   enbl: "1", level: "0", parent: "null", isLeaf: false, expanded: true,  loaded: true},
            {id: "6", name: "Bank 1",      num: "1",   debit: "500.00",  credit: "0.00",    balance: "500.00",   enbl: "0", level: "1", parent: "5",    isLeaf: true,  expanded: false, loaded: true},
            {id: "7", name: "Bank 2",      num: "2",   debit: "1000.00", credit: "1000.00", balance: "0.00",     enbl: "1", level: "1", parent: "5",    isLeaf: true,  expanded: false, loaded: true},
            {id: "8", name: "Fixed asset", num: "300", debit: "0.00",    credit: "1000.00", balance: "-1000.00", enbl: "0", level: "0", parent: "null", isLeaf: true,  expanded: false, loaded: true}
        ],
        grid = $("#treegrid");
    
    $.jgrid.formatter.integer.thousandsSeparator=',';
    $.jgrid.formatter.number.thousandsSeparator=',';
    $.jgrid.formatter.currency.thousandsSeparator=',';
    grid.jqGrid({
        datatype: "jsonstring",
        datastr: mydata,
        colNames: [/*"Id", */"Account", "Acc Num", "Debit", "Credit", "Balance", "Enabled"],
        colModel: [
            //{name: 'id', index: 'id', width: 1, hidden: true, key: true},
            {name: 'name', index: 'name', width: 180},
            {name: 'num', index: 'acc_num', width: 80, formatter: 'integer', sorttype: 'int', align: 'center'},
            {name: 'debit', index: 'debit', width: 80, formatter: 'number', sorttype: 'number', align: 'right'},
            {name: 'credit', index: 'credit', width: 80, formatter: 'number', sorttype: 'number', align: 'right'},
            {name: 'balance', index: 'balance', width: 80, formatter: 'number', sorttype: 'number', align: 'right'},
            {name: 'enbl', index: 'enbl', width: 60, align: 'center',
                formatter: 'checkbox', editoptions: {value: '1:0'},
                formatoptions: {disabled: false}}
        ],
        height: 'auto',
        gridview: true,
        rowNum: 10000,
        sortname: 'id',
        treeGrid: true,
        treeGridModel: 'adjacency',
        treedatatype: "local",
        ExpandColumn: 'name',
        caption: "Demonstrate how to use Tree Grid for the Adjacency Set Model",
        jsonReader: {
            repeatitems: false,
            root: function (obj) { return obj; },
            page: function () { return 1; },
            total: function () { return 1; },
            records: function (obj) { return obj.length; }
        }
    });
    

    【讨论】:

    • 非常感谢。我以为我必须在第 236 行否定 grid.treegrid.js 中的空检查,但这也可以。感谢您为 jqGrid 和社区所做的辛勤工作:)
    • 感谢您的精彩回答!我一直潜入谷歌地狱的黑暗深处,试图弄清楚如何使这项工作!
    • @RyanG:不客气!我很高兴我的旧答案也可以帮助你。
    【解决方案2】:

    您所说的排序是指自动排序树选项以使其位于适当的节点下,还是能够按其他行排序(其中第二行实际上没有意义,因为树组织了数据,所以我不确定排序是否有意义。)

    这是一个带有本地邻接树的jsFiddle - 这是对您的问题的更好描述吗?例如,在下面的数据中,id = 4 或 5 应该属于 id = 1,但它们却显示在 3 之下。

    这里的数据是:

    var mydata = [
        {id: "1", label:"No 1", number:"02200220", status:"OPEN", level:"0", parent: "", isLeaf: false, expanded:true, loaded:true},
        {id: "2", label:"No 2", number:"77733337", status:"ENTERED", level:"0", parent: "", isLeaf: false, expanded:true, loaded:true},
        {id: "6", label:"No 2a", number:"12345123", status:"WIRED", level:"1", parent: "2", isLeaf: true, expanded:false, loaded:true},
        {id: "3", label:"No 3", number:"02200111", status:"OPEN", level:"0", parent: "", isLeaf: false},
        {id: "4", label:"No 1a", number:"02200221", status:"OPEN", level:"1", parent: "1", isLeaf: true, expanded:false, loaded:true},
        {id: "5", label:"No 1b", number:"02242320", status:"CLOSED", level:"1", parent: "1", isLeaf: true, expanded:false, loaded:true}
    ];
    

    【讨论】:

    • 感谢亚当的回复。通过排序,我的意思是单击列标题以按列排序。这在您的示例(和链接的示例)中完美地证明了它不起作用。例如,按 ID 排序没有任何效果。出现在错误节点下的数据不是我的问题的一部分。使用 XML 数据,我没有这个问题:S 我只真正关心根节点排序,因为我可以处理其余的服务器端。
    • 嗯...似乎也无法让它工作 - 嵌套似乎稍微好一点,虽然不在父级的事情只是下降到底部:jsfiddle.net/aUDHx/4 - 也许是帖子在 trirand.com 博客上,因为他们之前似乎遇到过这个问题:trirand.com/blog/?page_id=393/bugs/…
    • 我会试一试的。感谢您的尝试!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多