Ext.js – Grid

Ext.js - Grid

This Ext.js Grid is a simple component to display data, which is a collection of record stored in Ext.data.Store in a tabular format.

Syntax

Following is a simple syntax to create grid in Ext.js.

Ext.create('Ext.grid.Panel',{
   grid properties..
   columns : [Columns]
});

Example

Following is a simple example showing grid.

<!DOCTYPE html>
<html>
   <head>
      <link href = "https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/classic/theme-classic/resources/theme-classic-all.css" 
         rel = "stylesheet" />
      <script type = "text/javascript" 
         src = "https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/ext-all.js"></script>
      
      <script type = "text/javascript">
         // Creation of data model
         Ext.define('StudentDataModel', {
            extend: 'Ext.data.Model',
            fields: [
               {name: 'name', mapping : 'name'},
               {name: 'age', mapping : 'age'},
               {name: 'marks', mapping : 'marks'}
            ]
         });
         
         Ext.onReady(function() {
            // Store data
            var myData = [
               { name : "Asha", age : "16", marks : "90" },
               { name : "Vinit", age : "18", marks : "95" },
               { name : "Anand", age : "20", marks : "68" },
               { name : "Niharika", age : "21", marks : "86" },
               { name : "Manali", age : "22", marks : "57" }
            ];
            
            // Creation of first grid store
            var gridStore = Ext.create('Ext.data.Store', {
               model: 'StudentDataModel',
               data: myData
            });
            
            // Creation of first grid
            Ext.create('Ext.grid.Panel', {
               id                : 'gridId',
               store             : gridStore,
               stripeRows        : true,
               title             : 'Students Grid',  // Title for the grid
               renderTo          :'gridDiv',         // Div id where the grid has to be rendered
               width             : 600,
               collapsible       : true,             // property to collapse grid
               enableColumnMove  :true,              // property which allows column to move to different position by dragging that column.
               enableColumnResize:true,        // property which allows to resize column run time.
               
               columns           :
               [{ 
                  header: "Student Name",
                  dataIndex: 'name',	
                  id : 'name',    
                  flex:  1,        // property defines the amount of space this column is going to take in the grid container with respect to all.	
                  sortable: true,  // property to sort grid column data. 
                  hideable: true   // property which allows column to be hidden run time on user request.
               },{
                  header: "Age", 
                  dataIndex: 'age',
                  flex: .5, 
                  sortable: true,
                  hideable: false   // this column will not be available to be hidden.
               },{
                  header: "Marks",
                  dataIndex: 'marks',
                  flex: .5, 
                  sortable: true, 
                  
                  // renderer is used to manipulate data based on some conditions here 
                  // who ever has marks greater than 75 will be displayed as 
                  // 'Distinction' else 'Non Distinction'.
                  renderer :  function (value, metadata, record, rowIndex, colIndex, store) {
                     if (value > 75) {
                        return "Distinction";	  
                     } else {
                        return "Non Distinction";
                     }
                  }
               }]
            });
         });
      </script>
   </head>
   
   <body>
      <div id = "gridDiv"></div>
   </body>
</html>

The above program will produce the following result βˆ’

Ext.js - Grid

Grid Poperties

Collapsible βˆ’ This property is to add a collapse feature to the grid. Add “Collapsible : true” feature in grid properties to add this feature.

Sorting βˆ’ This property is to add a sorting feature to the grid. Add Column property”sortable : true” in the grid to apply sorting ASC/DESC. By default, it is true. It can be made false, if you don’t want this feature to appear.

columns : [{ 
   header: "Student Name",
   dataIndex: 'name',	
   id : 'name',    
   flex:  1,  			
   sortable: true   // property to sort grid column data 
}]

By default, sorting can be applied with property sorters : {property: ‘id’, direction : ‘ASC’} in store. It will sort grid data based on the property provided in the sorters and the direction given, before rendering data into the grid.

Enable Column resize βˆ’ Column can be resized (its width can be increased or decreased) using grid properties “enableColumnResize: true”.

Column hideable βˆ’ Add Column property “hideable : true” in a grid to make the column appear or hide. By default, it is true. It can be made false, if you don’t want this feature to appear.

columns : [{ 
   header: "Student Name",
   dataIndex: 'name',	
   id : 'name',    
   flex:  1,  			
   sortable: true, 
   hideable: true   // property which allows column to be hidden run time on user request
}]

Draggable column βˆ’ Add Column property “enableColumnMove: true” is grid property with which we can move columns in a grid.

Renderer βˆ’ This is the property to customize the view of grid data based on the data we get from the store.

columns : [{
   header: "Marks",
   dataIndex: 'marks',
   flex: .5, 
   sortable: true, 
   
   // renderer is used to manipulate data based on some conditions here who
   // ever has marks greater than 75 will be displayed as 'Distinction'
   // else 'Non Distinction'.
   renderer :  function (value, metadata, record, rowIndex, colIndex, store) {
      if (value > 75) {
         return "Distinction";	  
      } else {
         return "Non Distinction";
      }
   }
}]

Next Topic : Click Here

Leave a Reply