как развернуть все дочерние узлы внутри одного родительского узла / элемента группы в настраиваемых элементах контекстного меню Get в версии Ag grid Enterprise

Я использую корпоративную версию ag grid. У меня есть настраиваемое контекстное меню, и внутри много родительских узлов, а внутри каждого родительского узла есть вложенные дочерние узлы. В настоящее время я могу расширить его на родительский уровень, но не знаю, как развернуть все дочерние узлы одновременно . Любая помощь будет принята с благодарностью. Спасибо

{
    name: 'Expand All',
    action() {
      params.api.forEachNode((node, index) => {
        if (node.group && node.groupData['ag-Grid-AutoColumn'] === 
            params.value) {
          node.setExpanded(true);
        }
      });
    }

person Momin Shahzad    schedule 03.09.2019    source источник


Ответы (2)


Я столкнулся с той же проблемой с AG Grid. К сожалению, я не смог найти ничего полезного в AG Grid API для достижения этой функциональности. Так что мне пришлось добиться этого следующим образом:

name: 'Expand All',
    action: () => {
      let totalChildNodes = 0;
      let checkCount = 0;
      params.api.forEachNode((node, index) => {
        if (node.group && node.groupData['ag-Grid-AutoColumn'] === params.value) {
          totalChildNodes = node.allChildrenCount;
          node.expanded = true;
        }
        if (totalChildNodes > 0 && checkCount <= totalChildNodes) {
          checkCount++;
          node.expanded = true;
        }
      });
      params.api.onGroupExpandedOrCollapsed();
    }

Приведенный выше код проверяет выбранный узел и получает количество его дочерних узлов, а затем также расширяет все его дочерние узлы.

person Usman Anwar    schedule 04.09.2019

Я решил это, используя вспомогательный метод для определения дочерних узлов следующим образом:

 getChildNodes(clickedNode:RowNode):RowNode[]{

    let haveEnteredChildZone:boolean = false;
    let haveLeftChildZone:boolean = false;
    let childNodes:RowNode[] = [];

    this.gridApi.forEachNode((n=>{
      if(n.id === clickedNode.id){haveEnteredChildZone = true; return;}
      if(haveEnteredChildZone && n.level === clickedNode.level){        haveLeftChildZone = true; return;}
      if(haveEnteredChildZone && !haveLeftChildZone){
        childNodes.push(n)
      }
    }))

    return childNodes;
  }

В приведенном ниже коде этот вспомогательный метод используется для расширения дочерних узлов, если их уровень был достаточно глубоким для моих требований:

drillRowToLevel(params, level) {

    let childNodes:RowNode[] = this.getChildNodes(params.node); //get child nodes
    childNodes.forEach(n=>{
        this.gridApi.setRowNodeExpanded(n,n.level<level)  //set child nodes expanded
    })
    this.gridApi.setRowNodeExpanded(params.node,params.node.level < level); //expand self
    this.gridApi.onGroupExpandedOrCollapsed();  //enact the expansion changes
  }

Вы можете упростить этот второй метод путем жесткого кодирования до самого высокого уровня, чтобы развернуть все дочерние узлы.

person richardprocter    schedule 09.05.2020