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 Platform Developer I Certification for Winter ’25

  Make Invocable Actions Easier to Configure with New InvocableVariable Modifiers Simplify the configuration of invocable actions using new modifiers from Salesforce. Both the defaultValue and placeholderText modifiers will appear in Flow Builder for the Action elements that correspond to an invocable method. Here’s how to use them. defaultValue Modifier : Set a default value for an input parameter. When the action is used, the input parameter will have a predefined value unless changed by the user. placeholderText Modifier : Set custom placeholder text for an input parameter. Text can provide examples or additional guidance to help users understand what to enter in the input field. Accessing these modifiers in Flow Builder makes it easier to configure and use the actions within your flows. This change applies to Lightning Experience and Salesforce Classic in Performance, Unlimited, Developer, Enterprise, and Database.com editions.

Maintain Your Administrator Certification for Spring ’25

  Manage Included Permission Sets in Permission Set Groups via Summaries Update user access more efficiently by specifying which permission set groups include a permission set directly from the permission set’s summary. Previously, to manage included permission sets, you were required to navigate to each permission set group’s page. From Setup, in the Quick Find box, enter  Permission Sets , and select Permission Sets. Select a permission set, and then click  View Summary . In the Related Permission Set Groups tab, click  Add  or  Remove . This change applies to Lightning Experience and Salesforce Classic (not available in all orgs) in Contact Manager, Group, Essentials, Professional, Enterprise, Performance, Unlimited, Developer, and Database.com editions. Sort List Views by Multiple Columns To see your data in a more intuitive way and make your list views more actionable, you can now sort list views on object home pages by up to five columns. Select the c...

Salesforce Architect Certification Maintenance (Winter '25)

  Update Records Using ISO State and Country Codes Standardize and simplify updating address records with two new fields that store the ISO code for country or territory and state or province. Improve data quality and accuracy using this new support for ISO codes, and reduce the risk of errors and inconsistencies that can occur when using names. Previously, the Address component stored only the name associated with the user’s selection. With this new support for ISO codes, you can update the country or territory and state or province fields on records with ISO codes instead of names. This feature can be used for new or existing screen flows. Here are the steps to create a new flow. In Setup, on the State and Country/Territory Picklists page, ensure that Enable Picklists for Address Fields is enabled. In Flow Builder, create a screen flow. Add a Screen element to the flow. Include an Address component in the Screen element. Optionally, specify a default value in the Country Code and...

Translate