jqGrid的treegrid的bug修复

来源:互联网 发布:亚瑟士 知乎 编辑:程序博客网 时间:2024/05/21 09:13

刚开始使用jqGrid,就碰到了难题。想把列表做成树形的treegrid,在网上查了下jqgrid也正好有这个方法,但是使用的过程中发现个问题,就是传入的数据顺序如果不是一棵树一棵树的排列好的,就会出现节点排序错乱的问题,比如这个树的节点跑到另外一棵树的后面。在官网上面找了好多资料,也没有人说过这个问题,可能没什么人用,也有可能是我使用错误了吧,如果是我使用错误了,官网例子也会出现这个问题。我也不管是我的操作错还是真的bug了,我自己在源码中修改了下。

先说明下我使用的是jqGrid 4.6的版本,后面有修改后的插件

在jqGrid.src 1577行中增加了

<span style="white-space:pre"></span>/*                            增加了给树排序的代码                             */                            var tempRowData = [];                            var count = -1;                            for (var i = 0; i < rowData.length; i++) { //把数据分成树的节点单位                                if (rowData[i].match('<tr')) {                                    count++;                                    tempRowData[count] = "";                                }                                tempRowData[count] += rowData[i];                            }                            var data = '';                            for (var i = 0; i < tempRowData.length; i++) {                                if (ts.p.data[i].pid == null) {                                    var dataArry = new Array();                                    dataArry[0] = tempRowData[i];                                    sortLeaf(dataArry, tempRowData, ts.p.data, ts.p.data[i].id); //依次排列出树的节点                                    data += dataArry.join('');                                }                            }                            // $("#" + $.jgrid.jqID(ts.p.id) + " tbody:first").append(rowData.join(''));原来代码                            $("#" + $.jgrid.jqID(ts.p.id) + " tbody:first").append(data);
在12655行中增加了

/* 依次查找出树的节点,dataArray是返回数据,tempRowData是树的节点数据,ts包含了树的据节点信息,parentId是父节点 */function sortLeaf(dataArray, tempRowData, node, parentId) {    for (var i = 0; i < node.length; i++) {        if (node[i].pid == parentId) {            dataArray[dataArray.length] = tempRowData[i];            sortLeaf(dataArray, tempRowData, node, node[i].id);        }    }}

这里需要注意的是,因为我在插件中增加了新的方法,所以在jqGrid方法中的colmodel方法和colName方法中必须要加上id和parentId。

插件下载链接:http://download.csdn.net/detail/qq805911956/9515640

5 0
原创粉丝点击