Salesforce lightning:treegrid - The Developer Guide
A tree grid displays structured data in a table with expandable rows. lightning:treeGrid component displays hierarchical data in a table. Suppose, you have to show Contacts just below the Account’s Name, you’ll have to use <aura:iteration> or <lightning:datatable>. But for both of these, you’ll have to use either Application Event or Component Event.
Instead of using two components, you can easily use <lightning:treeGrid>. It is neat and very simple to get the results. An example for which is as shown:
Don't forget to check out: Salesforce Lightning Dialer | Boost Sales productivity by making hassle-free calls
First create a Lightning Application:
<aura:application extends="force:slds"> <c:AccountContactTreeGrid/> </aura:application>
Lightning Component:
<aura:component controller='AccountContactTreeGridClass'> <aura:handler name="init" value="{!this}" action="{!c.init}" /> <aura:attribute name="accountColumns" type="List" /> <aura:attribute name="accountList" type="Object" /> <aura:attribute name="gridExpandedRows" type="List" /> <form> <div> <lightning:treeGrid columns="{! v.accountColumns }" data="{! v.accountList' }" keyField="Id" hideCheckboxColumn = "true"/> </div> </form> </aura:component>
LightningController:
({ init : function(component, event, helper) { helper.queryAccountFieldsMethod(component); } })
Helper:
({ queryAccountFieldsMethod : function(component) { // Call class's method 'accountResults' to get accounts var action = component.get("c.getAccountList"); action.setCallback(this,function(response){ var state = response.getState(); if(state == "SUCCESS"){ //alert("SUCCESS"); //console.log(response.getReturnValue()); // Set the value in TreeGrid //Set Account's TreeGrid Columns component.set('v.accountColumns', [ {label: 'Action', type: 'button', initialWidth: 150, }, {label: 'Account Name ', fieldName: 'Name', type: 'text', "_children": [ { "Name": 'Name' } ]}, {label: 'Account Phone ', fieldName: 'Phone', type: 'text'}, {label: 'Account Website ', fieldName: 'Website', type: 'url', typeAttributes:{ target: '_blank' } } ]); var results = response.getReturnValue(); for (var i=0; i<results.length; i++ ) { results[i]._children = results[i]['Contacts']; delete results[i].Contacts; } component.set('v.accountList', results); }else{ // alert("ERROR"); console.log("Failed with state: " + state); } }); $A.enqueueAction(action); }, })
Check out another amazing blog by Krati here: Application Events In Salesforce Lightning Framework
Apex Class:
public class AccountContactTreeGridClass { //Method for TreeGrid @AuraEnabled public static List <Account> getAccountList() { List<Account> accountList = new List<Account>(); accountList = [SELECT Id, Name, Phone, Website, (SELECT id, Name FROM Contacts) FROM Account LIMIT 500]; return accountList; } }