As you all know Grid is a main control in every dashboard. Every company uses a grid control for showing reports or any kind of data. Hence it is widely used and it is important that the grid must be loaded faster. So the performance of the grid control matters a lot. Isn’t it? Here in this post we are going to do a task which will increase the performance of the grid since we are going to load the data as per user request (on scrolling down). Sounds cool?. Normally what we do is, we will load all the data to the grid in a head shot, the problem in this manner is, it will take ages to load the full data to grid. Hence the user will close your application and the won’t return back. That is sad thing right? So we will concentrate on the performance part now. I hope you will like this.
Background
I am working in a dashboard application. So for me performance was the main criteria to take care. We have used server side paging to improve the performance. This I will share in my next article. Now we will try to load a client side data on demand. Let us say whenever user scroll down. Sounds fine? Ok, let us start then.
Using the code
To show this demo, I am using jQWidget jQX Grid control. If you are new to jQX Grid, you can find out some introduction here.
Now we are going to load the grid first. I hope you have already checked how to load the grid. Please see the following code.
Create an HTML page
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <title>Load Data To Grid On Scroll - Sibeesh Passion</title>
- </head>
- <body>
- <h3>Load Data To Grid On Scroll - Sibeesh Passion</h3>
- <br />
- <div id="jqxgrid"></div>
- </body>
- </html>
- <script src="jquery-1.9.1.js"></script>
- <script type="text/javascript" src="JQXItems/jqwidgets/jqxcore.js"></script>
- <script type="text/javascript" src="JQXItems/jqwidgets/jqxdata.js"></script>
- <script type="text/javascript" src="JQXItems/jqwidgets/jqxbuttons.js"></script>
- <script type="text/javascript" src="JQXItems/jqwidgets/jqxscrollbar.js"></script>
- <script type="text/javascript" src="JQXItems/jqwidgets/jqxlistbox.js"></script>
- <script type="text/javascript" src="JQXItems/jqwidgets/jqxdropdownlist.js"></script>
- <script type="text/javascript" src="JQXItems/jqwidgets/jqxmenu.js"></script>
- <script type="text/javascript" src="JQXItems/jqwidgets/jqxgrid.js"></script>
- <script type="text/javascript" src="JQXItems/jqwidgets/jqxgrid.filter.js"></script>
- <script type="text/javascript" src="JQXItems/jqwidgets/jqxgrid.sort.js"></script>
- <script type="text/javascript" src="JQXItems/jqwidgets/jqxgrid.selection.js"></script>
- <script type="text/javascript" src="JQXItems/jqwidgets/jqxgrid.pager.js"></script>
- <script type="text/javascript" src="JQXItems/jqwidgets/jqxgrid.columnsresize.js"></script>
- <script type="text/javascript" src="JQXItems/jqwidgets/jqxgrid.columnsreorder.js"></script>
- <script type="text/javascript" src="JQXItems/jqwidgets/jqxgrid.export.js"></script>
- <script type="text/javascript" src="JQXItems/jqwidgets/jqxdata.export.js"></script>
- <script type="text/javascript" src="JQXItems/jqwidgets/jqxdatatable.js"></script>
- <link href="JQXItems/jqwidgets/styles/jqx.base.css" rel="stylesheet" />
Grid Settings or Grid Initialization
- <script type="text/javascript">
- $(document).ready(function()
- {
- // prepare the data
- var data = new Array();
- var firstNames = ["Sibeesh", "Ajay", "Ansary", "Aghil", "Shanto", "Libin", "Vignesh", "Ramesh", "Sathian", "Elango", "karthik"];
- var lastNames = ["Venu", "Bhasy", "Rasheed", "Ghosh", "Thomas", "Lawrence", "Vicky", "K", "K", "S", "Srinivasan"];
- var productNames = ["Shoe", "Sandals", "Shampoo", "Soap", "Hair Lotion", "Creams", "Bags", "Watch", "Books", "Mobile", "Tab", "Laptop"];
- var priceValues = ["2.25", "1.5", "3.0", "3.3", "4.5", "3.6", "3.8", "2.5", "5.0", "20.75", "13.25", "124.0"];
- // generate sample data.
- var generatedata = function(startindex, endindex)
- {
- var data = {};
- for (var i = startindex; i < endindex; i++)
- {
- var row = {};
- var productindex = Math.floor(Math.random() * productNames.length);
- var price = parseFloat(priceValues[productindex]);
- var quantity = 1 + Math.round(Math.random() * 10);
- row["id"] = i;
- row["firstname"] = firstNames[Math.floor(Math.random() * firstNames.length)];
- row["lastname"] = lastNames[Math.floor(Math.random() * lastNames.length)];
- row["productname"] = productNames[productindex];
- row["price"] = price;
- row["quantity"] = quantity;
- row["total"] = price * quantity;
- data[i] = row;
- }
- return data;
- }
- var source = {
- datatype: "array",
- localdata:
- {},
- totalrecords: 1000000
- };
- // load virtual data.
- var rendergridrows = function(params)
- {
- var data = generatedata(params.startindex, params.endindex);
- return data;
- }
- var dataAdapter = new $.jqx.dataAdapter(source);
- $("#jqxgrid").jqxGrid(
- {
- width: 850,
- source: dataAdapter,
- virtualmode: true,
- rendergridrows: rendergridrows,
- columns: [
- {
- text: 'Id',
- datafield: 'id',
- width: 100
- },
- {
- text: 'First Name',
- datafield: 'firstname',
- width: 120
- },
- {
- text: 'Last Name',
- datafield: 'lastname',
- width: 120
- },
- {
- text: 'Product',
- datafield: 'productname',
- width: 180
- },
- {
- text: 'Quantity',
- datafield: 'quantity',
- width: 80,
- cellsalign: 'right'
- },
- {
- text: 'Unit Price',
- datafield: 'price',
- width: 90,
- cellsalign: 'right',
- cellsformat: 'c2'
- },
- {
- text: 'Total',
- datafield: 'total',
- cellsalign: 'right',
- cellsformat: 'c2'
- }]
- });
- });
- </script>



Santhakumar MunuswamyPosted Nov 11, 2015, 9:44 AM
Good Article. Keep it up
Sibeesh VenuPosted Nov 4, 2015, 7:27 AM
Amol S Dighambar Thanks a lot
Sibeesh VenuPosted Nov 4, 2015, 7:26 AM
Humayun Kabir Mamun Thanks a lot
Amol S DighambarPosted Nov 4, 2015, 7:09 AM
gr8 example
Humayun Kabir MamunPosted Nov 4, 2015, 6:27 AM
Nice Sibi...
Sibeesh VenuPosted Nov 4, 2015, 6:21 AM
Pramod Gupta I am glad you liked it :)
Pramod GuptaPosted Nov 4, 2015, 6:19 AM
liked it
Sibeesh VenuPosted Nov 4, 2015, 5:51 AM
Upendra Pratap Shahi Thank you so much, you can call me Sibi buddy
Upendra Pratap ShahiPosted Nov 4, 2015, 5:48 AM
Great blast sir...thanks for sharing...