使用DataView进行Slickgrid排序并展开/折叠

时间:2014-07-11 07:57:20

标签: slickgrid

我一直在做大量的谷歌搜索,但无法找到实现这一目标的方法。对不起,如果我在搜索中错过了它。

我使用Example 4 adding tree functionality作为模板,但在树功能处于活动状态时,我无法实现列排序。

由于ID不再有序,我在内联过滤器的渲染版本中无限循环地尝试了所有内容。

是否有人能够使用树功能实现排序或有任何指示如何实现它?有没有办法对父行进行排序并将父母和孩子放在一起?

我的过滤器与示例中的过滤器基本相同,但对搜索进行了一些小调整。

如果因为父母和孩子不再是连续的,那么它就会卡住item.parent。现在所有行都有子项。

if (item.parent != null) {
            var parent = oppLineGridData[item.parent];

            while (parent) {
                if (parent._collapsed) {
                    return false;
                }

                parent = oppLineGridData[parent.parent];
            }
        }

全功能:

function openFilter(item) {

        if (specificColumn != null) {
            if (searchString != "" && item[specificColumn].toLowerCase().indexOf(searchString) == -1) {
                return false;
            }

        } else {
            if (searchString != ""
                && item["accountName"].toLowerCase().indexOf(searchString) == -1
                && item["solution"].toString().toLowerCase().indexOf(searchString) == -1
                && item["Adjusted_Commitment__c"].toLowerCase().indexOf(searchString) == -1
                && item["Deal_Registration_ID__c"].toLowerCase().indexOf(searchString) == -1
                && item["lineItemValue"].toString().toLowerCase().indexOf(searchString) == -1
                && item["oppotunityName"].toLowerCase().indexOf(searchString) == -1
                && item["closeDate"].toLowerCase().indexOf(searchString) == -1
                && item["productName"].toLowerCase().indexOf(searchString) == -1
                && item["stageName"].toLowerCase().indexOf(searchString) == -1
                && item["ownerName"].toLowerCase().indexOf(searchString) == -1
                && item["accountManagerList"].toLowerCase().indexOf(searchString) == -1
                && item["accountManagerMgr2"].toLowerCase().indexOf(searchString) == -1
                && item["ProServicesEngagement"].toLowerCase().indexOf(searchString) == -1
                && item["proServicesEngagementAll"].toLowerCase().indexOf(searchString) == -1
                && item["productType"].toLowerCase().indexOf(searchString) == -1
                && item["commissionableEMName"].toLowerCase().indexOf(searchString) == -1
                && item["lastUpdated"].toLowerCase().indexOf(searchString) == -1
                && item["updatedBy"].toLowerCase().indexOf(searchString) == -1) {
                return false;
            }
        }
        if (item.parent != null) {
            var parent = oppLineGridData[item.parent];

            while (parent) {
                if (parent._collapsed) {
                    return false;
                }

                parent = oppLineGridData[parent.parent];
            }
        }

        return true;
    }

1 个答案:

答案 0 :(得分:1)

唯一的答案是禁用内联过滤器。换句话说,选项inlineFilters应设置为false。 我只是遇到了同样的问题,我从经验中告诉你。 SlickGrid的过滤器内联不会处理复杂的代码。 即使是带有if内部或内部循环的for也足以让它进入我的无限循环。