Skip to main content

Custom Table In LWC

I'm assuming you've Basic understanding of Lightning Web Component, I'll be explaining you the syntax that will be generic.

HTML:

<template>
<!-- Header Part -->
    <lightning-card title="Custom Data table in Lightning Web Components">
        <div class="slds-grid slds-gutters">
            <div class="slds-col">
                <span></span>
            </div>
            <div class="slds-col">
                <span>
<!--A Button For extra feature-->
                    <lightning-button label="Show Selected Contacts" 
onclick={showContacts} style="margin-left: 40%" variant="brand">
</lightning-button>
                </span>
            </div>
        </div><br/>
<!-- Table start-->
        <table class="slds-table slds-table_cell-buffer slds-table_bordered">
<!--Column Header start-->
            <thead>
                <tr class="slds-line-height_reset">
                    <th class="" scope="col">
                        <div class="slds-truncate">
<!--Column Header For CheckBox-->
                            <lightning-input onchange={allSelected} type="checkbox">
</lightning-input>
                        </div>
                    </th>
                    <th class="" scope="col">
                        <div class="slds-truncate" title="Name">Name</div>
                    </th>
                    <th class="" scope="col">
                        <div class="slds-truncate" title="First Name">Account Name
</div>
                    </th>
                    <th class="" scope="col">
                        <div class="slds-truncate" title="Last Name">Last Name</div>
                    </th>
                    <th class="" scope="col">
                        <div class="slds-truncate" title="Phone">Phone</div>
                    </th>
                    <th class="" scope="col">
                        <div class="slds-truncate" title="Email">Email</div>
                    </th>
                </tr>
            </thead>
            <tbody>
<!--data is an array of record which is set in .js file-->
                <template for:each={data} for:item="con">
                    <tr key={con.Id}>
                        <th scope="col">
                            <div>
                             <lightning-input type="checkbox" value={con.Name} 
data-id={con.Id}></lightning-input>
                            </div>
                        </th>
                        <th scope="col">
<!--First Column Value as a link-->
                            <lightning-button label={con.Name} value={con.Name}
  data-id={con.Id} onclick={showDetail} variant="base">
</lightning-button>
                        </th>
                        <th scope="col">
                            <div>{con.FirstName}</div>
                        </th>
                        <th scope="col">
                            <div>{con.LastName}</div>
                        </th>
                        <th scope="col">
                            <div>
                                <lightning-formatted-phone value={con.Phone}>
</lightning-formatted-phone>
                            </div>
                        </th>
                        <th scope="col">
                            <div>
                                <lightning-formatted-email value={con.Email}>
</lightning-formatted-email>
                            </div>
                        </th>
                    </tr>
                </template>
            </tbody>
        </table>
</lightning-card>
  </template>

You can change the Datatype or the style or the format by using HTML tags or styles.

.js Sample:

import { LightningElementtrackwire  } from 'lwc';
import retriveCons from '@salesforce/apex/LWCExampleController.getContacts';
export default class CustomDatatableInLWC extends LightningElement {
@track data = [];
    @track error;
    @track selectedCons;
// Getting Contacts using Wire Service
    @wire(retriveCons)
    contacts(result) {
        if (result.data) {
            this.data = result.data;
            this.error = undefined;

        } else if (result.error) {
            this.error = result.error;
            this.data = undefined;
        }
    }
// Select the all rows
    allSelected(event) {
        let selectedRows = this.template.querySelectorAll('lightning-input');
        
        for(let i = 0i < selectedRows.lengthi++) {
            if(selectedRows[i].type === 'checkbox') {
                selectedRows[i].checked = event.target.checked;
            }
        }
    }

}

In metaData file just replace <isExposed>false</isExposed> with the below lines of code:

<isExposed>true</isExposed>
    <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
    </targets>

ApexClass:

public inherited sharing class LWCExampleController {    
 @AuraEnabled(Cacheable = true)
    public static List<ContactgetContacts(){
        return [SELECT IdNameFirstName,LastNamePhoneEmail FROM Contact 
limit 10];
    }
}

Let me know in Comment section in case of any Doubt... 

Comments

Popular posts from this blog

Maintain Your Administrator Certification for Spring ’24

Maintain Your Administrator Certification for Spring ’24 Intelligence Views Intelligence views are now available for leads, contacts, and accounts in Sales Cloud. Turn on a view in Setup and then add the Intelligence View button to the view-button layout for the applicable page. New Salesforce organizations include the views by default, but admins for existing orgs can enable: Lead Intelligence View Contact Intelligence View Account Intelligence View Find specifics about these views in the next three topics. Turn on Contact Intelligence View in Contact Intelligence View Setup and add the Intelligence View button to the Contact List View button layout. To view engagement metrics, enable Email Tracking in the Inbox section of Sales Engagement Setup. To see the Intelligence View, users go to the Contact home page and click Intelligence View. To view engagement metrics, choose Engagement Metrics from the Metrics menu. To see the Account Intelligence view, go to the account home page and cl...

Platform App Builder Certification Maintenance (Winter '24)

 Maintain Your Platform App Builder Certification for Winter ’24 The Enable Reactive Components for Screen Flows running API Version 57.0 and 58.0 setting expires in Winter ’25. Before that release, upgrade your flows to run on API version 59.0 or later to take advantage of reactive components. Build Screen Flows with Reactive Global Variables Save time by referencing global variables in reactive formulas on flow screens. Use custom labels in reactive formulas to display translatable text to your users. For example, create a custom setting called DiscountPercentage, which specifies org, profile, and user discount percentages. Reference the variable in reactive formulas across a screen flow. The screen flow applies the correct discount value for the user running the flow and recalculates the value as the user makes changes.   Build Screen Flows with Reactive Selections Use choice components to respond to user selections elsewhere on the same screen. For example, on a flow ...

Administrator Certification Maintenance (Spring '23)

 Maintain Your Administrator Certification for Spring '23 1. What information is listed in the Details panel for recently used reports? Answer: A, B, C 2. What is used to give sales reps access to a guided process to import contacts and leads? Answer:  Sample CSV file 3. Which feature efficiently removes inactive picklist values? Answer: Bulk Delete Unused Values 4. Which type of Process Builder processes can be converted using the Migrate to Flow tool? Answer: Record-triggered Get Hands-on with Enhance Record Pages With Dynamic Forms Follow steps show in Screenshot also highlighted with Red Box:

Translate