{"id":2085,"date":"2013-12-06T16:52:07","date_gmt":"2013-12-06T13:52:07","guid":{"rendered":"http:\/\/www.dhtmlx.com\/blog\/?p=2085"},"modified":"2026-08-28T15:35:30","modified_gmt":"2026-08-28T12:35:30","slug":"rating-bar-feature-in-dhtmlxgrid","status":"publish","type":"post","link":"https:\/\/dhtmlx.com\/blog\/rating-bar-feature-in-dhtmlxgrid\/","title":{"rendered":"How to Add Rating Bar in dhtmlxGrid"},"content":{"rendered":"<p>This quick tutorial leads you through the steps of adding a simple star rating bar in a cell of <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxGrid\/\">dhtmlxGrid<\/a>. You&#8217;ll learn how to create a custom exCell (&#8220;extended cell&#8221;) that allows the end users to view\/set the rating of an item in our JavaScript datagrid. <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2013\/12\/grid_rating_bar.png\" alt=\"DHTMLX Grid with Rating Bar\" title=\"DHTMLX Grid with Rating Bar\" width=\"559\" height=\"249\" class=\"aligncenter size-full wp-image-2086\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2013\/12\/grid_rating_bar.png 559w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2013\/12\/grid_rating_bar-300x133.png 300w\" sizes=\"auto, (max-width: 559px) 100vw, 559px\" \/><\/p>\n<p><a href=\"https:\/\/dhtmlx.com\/x\/download\/regular\/tutorials\/rating_exCell_in_grid.zip\">Download the demo<\/a> with a star rating bar in a grid or read the tutorial and see how it can be done step by step.<\/p>\n<p>&nbsp;<br \/>\n<strong>Step 1 &#8211; Creating a Custom ExCell Type<\/strong><\/p>\n<p>Let&#8217;s start the creation of a custom exCell. ExCell is a unique mechanism of dhtmlxGrid that defines the data format and the way of editing data for each column (cell) in a grid. We&#8217;ll take a standard read-only &#8220;ro&#8221; exCell as a basis of our custom exCell:<\/p>\n<div class=\"codecolorer-container javascript default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">&nbsp; <span class=\"kw1\">function<\/span> eXcell_rating<span class=\"br0\">&#40;<\/span>cell<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/excell name is defined here<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; eXcell_ro.<span class=\"me1\">call<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span><span class=\"sy0\">,<\/span> cell<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; eXcell_rating.<span class=\"kw1\">prototype<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> eXcell<span class=\"sy0\">;<\/span> &nbsp; &nbsp;<span class=\"co1\">\/\/ nest all other methods from base class<\/span><\/div><\/div>\n<p>&nbsp;<br \/>\n<strong>Step 2 &#8211; Setting Style for Custom ExCell<\/strong><\/p>\n<p><!--more-->The content of a cell with a star rating bar will be the following:<\/p>\n<div class=\"codecolorer-container javascript default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"sy0\">&lt;<\/span>div <span class=\"kw5\">class<\/span><span class=\"sy0\">=<\/span>\u201dstars\u201d<span class=\"sy0\">&gt;<\/span><br \/>\n<span class=\"sy0\">&lt;<\/span>a rating<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;1&quot;<\/span> <span class=\"kw5\">class<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;gridRatingMarker&quot;<\/span><span class=\"sy0\">&gt;&lt;\/<\/span>a<span class=\"sy0\">&gt;<\/span> <span class=\"co1\">\/\/single star icon<\/span><br \/>\n<span class=\"sy0\">&lt;<\/span>a rating<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;2&quot;<\/span> <span class=\"kw5\">class<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;gridRatingMarker&quot;<\/span><span class=\"sy0\">&gt;&lt;\/<\/span>a<span class=\"sy0\">&gt;<\/span><br \/>\n<span class=\"sy0\">&lt;<\/span>a rating<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;3&quot;<\/span> <span class=\"kw5\">class<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;gridRatingMarker&quot;<\/span><span class=\"sy0\">&gt;&lt;\/<\/span>a<span class=\"sy0\">&gt;<\/span><br \/>\n<span class=\"sy0\">&lt;<\/span>a rating<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;4&quot;<\/span> <span class=\"kw5\">class<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;gridRatingMarker&quot;<\/span><span class=\"sy0\">&gt;&lt;\/<\/span>a<span class=\"sy0\">&gt;<\/span><br \/>\n<span class=\"sy0\">&lt;<\/span>a rating<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;5&quot;<\/span> <span class=\"kw5\">class<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;gridRatingMarker&quot;<\/span><span class=\"sy0\">&gt;&lt;\/<\/span>a<span class=\"sy0\">&gt;<\/span><br \/>\n<span class=\"sy0\">&lt;\/<\/span>div<span class=\"sy0\">&gt;<\/span><\/div><\/div>\n<p>We also add CSS for our rating star icons:<\/p>\n<div class=\"codecolorer-container css default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"css codecolorer\">&nbsp; &nbsp; &lt;style<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re1\">.stars<\/span> <span class=\"br0\">&#123;<\/span><span class=\"kw1\">float<\/span><span class=\"sy0\">:<\/span><span class=\"kw2\">left<\/span><span class=\"sy0\">;<\/span> <span class=\"kw1\">height<\/span><span class=\"sy0\">:<\/span><span class=\"re3\">20px<\/span><span class=\"sy0\">;<\/span><span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re1\">.stars<\/span> li<span class=\"br0\">&#123;<\/span><span class=\"kw1\">float<\/span><span class=\"sy0\">:<\/span><span class=\"kw2\">left<\/span><span class=\"sy0\">;<\/span><span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re1\">.stars<\/span> li a<span class=\"sy0\">:<\/span><span class=\"kw5\">hover<\/span><span class=\"sy0\">,<\/span><span class=\"re1\">.stars<\/span> <span class=\"re1\">.rated<\/span><span class=\"br0\">&#123;<\/span><span class=\"kw1\">background<\/span><span class=\"sy0\">:<\/span><span class=\"kw3\">url<\/span><span class=\"br0\">&#40;<\/span>codebase\/imgs\/rating\/star_1.png<span class=\"br0\">&#41;<\/span> <span class=\"kw2\">no-repeat<\/span><span class=\"sy0\">;<\/span> <span class=\"kw1\">width<\/span><span class=\"sy0\">:<\/span><span class=\"re3\">20px<\/span><span class=\"sy0\">;<\/span> <span class=\"kw1\">height<\/span><span class=\"sy0\">:<\/span><span class=\"re3\">20px<\/span><span class=\"sy0\">;<\/span><span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re1\">.stars<\/span> a<span class=\"br0\">&#123;<\/span><span class=\"kw1\">float<\/span><span class=\"sy0\">:<\/span><span class=\"kw2\">left<\/span><span class=\"sy0\">;<\/span><span class=\"kw1\">background<\/span><span class=\"sy0\">:<\/span><span class=\"kw3\">url<\/span><span class=\"br0\">&#40;<\/span>codebase\/imgs\/rating\/star_2.png<span class=\"br0\">&#41;<\/span> <span class=\"kw2\">no-repeat<\/span><span class=\"sy0\">;<\/span><span class=\"kw1\">width<\/span><span class=\"sy0\">:<\/span><span class=\"re3\">20px<\/span><span class=\"sy0\">;<\/span> <span class=\"kw1\">height<\/span><span class=\"sy0\">:<\/span><span class=\"re3\">20px<\/span><span class=\"sy0\">;<\/span><span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &lt;\/style<span class=\"sy0\">&gt;<\/span><\/div><\/div>\n<p>We set path to the images of the stars in the parameter <em>background<\/em>. In our case:<\/p>\n<ul>\n<li>star_1.png &#8211; for rated star icon<\/li>\n<li>star_2.png &#8211; for unrated (empty) star icon<\/li>\n<\/ul>\n<p>&nbsp;<br \/>\n&nbsp;<br \/>\n<strong>Step 3 &#8211; Rendering Star Rating Bar in a Grid Cell<\/strong><\/p>\n<p>The next step is to set up the function <em>setValue<\/em> that is responsible for rendering of a cell content. We modify this function like this:<\/p>\n<div class=\"codecolorer-container javascript default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">setValue<\/span><span class=\"sy0\">=<\/span><span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span>val<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">var<\/span> r_val<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;&lt;div class='stars'&gt;&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">for<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw1\">var<\/span> i<span class=\"sy0\">=<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span> i<span class=\"sy0\">&lt;=<\/span><span class=\"nu0\">5<\/span><span class=\"sy0\">;<\/span> i<span class=\"sy0\">++<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>val<span class=\"sy0\">&gt;=<\/span>i<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r_val<span class=\"sy0\">+=<\/span><span class=\"st0\">&quot;&lt;a rating='&quot;<\/span><span class=\"sy0\">+<\/span>i<span class=\"sy0\">+<\/span><span class=\"st0\">&quot;' class='rated gridRatingMarker'&gt;&lt;\/a&gt;&quot;<\/span> <span class=\"co1\">\/\/set a rated star<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">else<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r_val<span class=\"sy0\">+=<\/span><span class=\"st0\">&quot;&lt;a rating='&quot;<\/span><span class=\"sy0\">+<\/span>i<span class=\"sy0\">+<\/span><span class=\"st0\">&quot;' class='gridRatingMarker'&gt;&lt;\/a&gt;&quot;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ set an unrated star<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r_val<span class=\"sy0\">+=<\/span><span class=\"st0\">&quot;&lt;\/div&gt;&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">setCValue<\/span><span class=\"br0\">&#40;<\/span>r_val<span class=\"sy0\">,<\/span>val<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>When referring to a cell value, we need to get an original rating value and not the HTML content that was placed in the cell. Therefore, before forming the HTML content of the cell, we need to save its original value and place it into the new function <em>getValue<\/em>:<\/p>\n<div class=\"codecolorer-container javascript default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">setValue<\/span><span class=\"sy0\">=<\/span><span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span>val<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">cell<\/span>.<span class=\"me1\">orig_val<\/span> <span class=\"sy0\">=<\/span> val<span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ saving the original value of the cell<\/span><br \/>\n\u2026<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">getValue<\/span><span class=\"sy0\">=<\/span><span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span> <span class=\"co1\">\/\/ adding the getValue function which returns the original value of the cell<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw1\">this<\/span>.<span class=\"me1\">cell<\/span>.<span class=\"me1\">orig_val<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>&nbsp;<br \/>\n<strong>Step 4 &#8211; Adding the Ability to Set Rating to a Selected Item<\/strong><\/p>\n<p>Now we need to add event listeners to our star elements to make them react on the user&#8217;s actions. We will use the dhtmlxEvent functionality to add the event handlers to the dhtmlxGrid body.<\/p>\n<li><strong>onmouseover event <\/strong><\/li>\n<p>Hovering over any rating star will turn on the mode, when the user can set a new rating to an item. So instead of showing the current average rating of the item we should highlight the stars according to the hovering star.<br \/>\nIf the user hovers the mouse on the star which defines mark &#8220;4&#8221;, stars with mark &#8220;1&#8221;, &#8220;2&#8221; and &#8220;3&#8221; should also be highlighted.<\/p>\n<div class=\"codecolorer-container javascript default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dhtmlxEvent<span class=\"br0\">&#40;<\/span>_grid.<span class=\"me1\">entBox<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;mouseover&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span>e<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">var<\/span> el <span class=\"sy0\">=<\/span> e.<span class=\"me1\">target<\/span> <span class=\"sy0\">||<\/span> e.<span class=\"me1\">scrElement<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>el.<span class=\"me1\">className<\/span> <span class=\"sy0\">||<\/span> <span class=\"st0\">&quot;&quot;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">indexOf<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;gridRatingMarker&quot;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">!=<\/span><span class=\"st0\">&quot;-1&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span> <span class=\"co1\">\/\/ check if the observable object has the class &quot;gridRatingMarker&quot;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">for<\/span><span class=\"br0\">&#40;<\/span> <span class=\"kw1\">var<\/span> i<span class=\"sy0\">=<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span> i<span class=\"sy0\">&lt;=<\/span><span class=\"nu0\">5<\/span><span class=\"sy0\">;<\/span> i<span class=\"sy0\">++<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span> <span class=\"co1\">\/\/iterating through the star icons<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>i<span class=\"sy0\">&lt;=<\/span>el.<span class=\"me1\">getAttribute<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;rating&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; el.<span class=\"me1\">parentNode<\/span>.<span class=\"me1\">childNodes<\/span><span class=\"br0\">&#91;<\/span>i<span class=\"sy0\">-<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span>.<span class=\"me1\">className<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;rated gridRatingMarker&quot;<\/span> <span class=\"co1\">\/\/ highlight the star<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"kw1\">else<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; el.<span class=\"me1\">parentNode<\/span>.<span class=\"me1\">childNodes<\/span><span class=\"br0\">&#91;<\/span>i<span class=\"sy0\">-<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span>.<span class=\"me1\">className<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;gridRatingMarker&quot;<\/span> <span class=\"co1\">\/\/ set the star as unmarked<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<li><strong>onmouseout event<\/strong><\/li>\n<p>If the user leaves a star icon without clicking on it, we should put back the average rating of the item.<\/p>\n<div class=\"codecolorer-container javascript default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dhtmlxEvent<span class=\"br0\">&#40;<\/span>_grid.<span class=\"me1\">entBox<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">&quot;mouseout&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span>e<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">var<\/span> el <span class=\"sy0\">=<\/span> e.<span class=\"me1\">target<\/span> <span class=\"sy0\">||<\/span> e.<span class=\"me1\">scrElement<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>el.<span class=\"me1\">className<\/span> <span class=\"sy0\">||<\/span> <span class=\"st0\">&quot;&quot;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">indexOf<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;gridRatingMarker&quot;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">!=<\/span><span class=\"st0\">&quot;-1&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _grid.<span class=\"me1\">cells4<\/span><span class=\"br0\">&#40;<\/span>el.<span class=\"me1\">parentNode<\/span>.<span class=\"me1\">parentNode<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">setValue<\/span><span class=\"br0\">&#40;<\/span>_grid.<span class=\"me1\">cells4<\/span><span class=\"br0\">&#40;<\/span>el.<span class=\"me1\">parentNode<\/span>.<span class=\"me1\">parentNode<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">getValue<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/set the original saved value of the cell<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<li><strong>onmousedown event<\/strong><\/li>\n<p>If the user clicks on a star icon, then a new rating value should be applied.<\/p>\n<div class=\"codecolorer-container javascript default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dhtmlxEvent<span class=\"br0\">&#40;<\/span>_grid.<span class=\"me1\">entBox<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">&quot;mousedown&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span>e<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">var<\/span> el <span class=\"sy0\">=<\/span> e.<span class=\"me1\">target<\/span> <span class=\"sy0\">||<\/span> e.<span class=\"me1\">scrElement<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>el.<span class=\"me1\">className<\/span> <span class=\"sy0\">||<\/span> <span class=\"st0\">&quot;&quot;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">indexOf<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;gridRatingMarker&quot;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">!=<\/span><span class=\"st0\">&quot;-1&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _grid.<span class=\"me1\">cells4<\/span><span class=\"br0\">&#40;<\/span>el.<span class=\"me1\">parentNode<\/span>.<span class=\"me1\">parentNode<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">setValue<\/span><span class=\"br0\">&#40;<\/span>el.<span class=\"me1\">getAttribute<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;rating&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ setting a new value to a cell<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>We need to place these events in our exCell function.<\/p>\n<p>NOTE that the events should be attached only once but not to each row in your grid. So to avoid the events cloning, make sure that the events haven&#8217;t been already attached.<br \/>\nFor example:<\/p>\n<div class=\"codecolorer-container javascript default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span>_grid._run_rating_once<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"co1\">\/\/ attaching your events<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_grid._run_rating_once <span class=\"sy0\">=<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>Now our exCell is ready and the final code should look the following way:<\/p>\n<div class=\"codecolorer-container javascript default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;height:600px;\"><div class=\"javascript codecolorer\">&nbsp; &nbsp; <span class=\"kw1\">function<\/span> eXcell_rating<span class=\"br0\">&#40;<\/span>cell<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; eXcell_ro.<span class=\"me1\">call<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span><span class=\"sy0\">,<\/span> cell<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>cell<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">var<\/span> _grid <span class=\"sy0\">=<\/span> <span class=\"kw1\">this<\/span>.<span class=\"me1\">grid<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span>_grid._run_rating_once<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dhtmlxEvent<span class=\"br0\">&#40;<\/span>_grid.<span class=\"me1\">entBox<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;mouseover&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span>e<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">var<\/span> el <span class=\"sy0\">=<\/span> e.<span class=\"me1\">target<\/span> <span class=\"sy0\">||<\/span> e.<span class=\"me1\">scrElement<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>el.<span class=\"me1\">className<\/span> <span class=\"sy0\">||<\/span> <span class=\"st0\">&quot;&quot;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">indexOf<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;gridRatingMarker&quot;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">!=<\/span><span class=\"st0\">&quot;-1&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">for<\/span><span class=\"br0\">&#40;<\/span> <span class=\"kw1\">var<\/span> i<span class=\"sy0\">=<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span> i<span class=\"sy0\">&lt;=<\/span><span class=\"nu0\">5<\/span><span class=\"sy0\">;<\/span> i<span class=\"sy0\">++<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>i<span class=\"sy0\">&lt;=<\/span>el.<span class=\"me1\">getAttribute<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;rating&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; el.<span class=\"me1\">parentNode<\/span>.<span class=\"me1\">childNodes<\/span><span class=\"br0\">&#91;<\/span>i<span class=\"sy0\">-<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span>.<span class=\"me1\">className<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;rated gridRatingMarker&quot;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"kw1\">else<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; el.<span class=\"me1\">parentNode<\/span>.<span class=\"me1\">childNodes<\/span><span class=\"br0\">&#91;<\/span>i<span class=\"sy0\">-<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span>.<span class=\"me1\">className<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;gridRatingMarker&quot;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dhtmlxEvent<span class=\"br0\">&#40;<\/span>_grid.<span class=\"me1\">entBox<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">&quot;mouseout&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span>e<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">var<\/span> el <span class=\"sy0\">=<\/span> e.<span class=\"me1\">target<\/span> <span class=\"sy0\">||<\/span> e.<span class=\"me1\">scrElement<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>el.<span class=\"me1\">className<\/span> <span class=\"sy0\">||<\/span> <span class=\"st0\">&quot;&quot;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">indexOf<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;gridRatingMarker&quot;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">!=<\/span><span class=\"st0\">&quot;-1&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _grid.<span class=\"me1\">cells4<\/span><span class=\"br0\">&#40;<\/span>el.<span class=\"me1\">parentNode<\/span>.<span class=\"me1\">parentNode<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">setValue<\/span><span class=\"br0\">&#40;<\/span>_grid.<span class=\"me1\">cells4<\/span><span class=\"br0\">&#40;<\/span>el.<span class=\"me1\">parentNode<\/span>.<span class=\"me1\">parentNode<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">getValue<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dhtmlxEvent<span class=\"br0\">&#40;<\/span>_grid.<span class=\"me1\">entBox<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">&quot;mousedown&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span>e<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">var<\/span> el <span class=\"sy0\">=<\/span> e.<span class=\"me1\">target<\/span> <span class=\"sy0\">||<\/span> e.<span class=\"me1\">scrElement<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>el.<span class=\"me1\">className<\/span> <span class=\"sy0\">||<\/span> <span class=\"st0\">&quot;&quot;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">indexOf<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;gridRatingMarker&quot;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">!=<\/span><span class=\"st0\">&quot;-1&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _grid.<span class=\"me1\">cells4<\/span><span class=\"br0\">&#40;<\/span>el.<span class=\"me1\">parentNode<\/span>.<span class=\"me1\">parentNode<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">setValue<\/span><span class=\"br0\">&#40;<\/span>el.<span class=\"me1\">getAttribute<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;rating&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _grid._run_rating_once <span class=\"sy0\">=<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">setValue<\/span><span class=\"sy0\">=<\/span><span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span>val<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">cell<\/span>.<span class=\"me1\">orig_val<\/span> <span class=\"sy0\">=<\/span> val<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">var<\/span> r_val<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;&lt;div class='stars'&gt;&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">for<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw1\">var<\/span> i<span class=\"sy0\">=<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span> i<span class=\"sy0\">&lt;=<\/span><span class=\"nu0\">5<\/span><span class=\"sy0\">;<\/span> i<span class=\"sy0\">++<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>val<span class=\"sy0\">&gt;=<\/span>i<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r_val<span class=\"sy0\">+=<\/span><span class=\"st0\">&quot;&lt;a rating='&quot;<\/span><span class=\"sy0\">+<\/span>i<span class=\"sy0\">+<\/span><span class=\"st0\">&quot;' class='rated gridRatingMarker'&gt;&lt;\/a&gt;&quot;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">else<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r_val<span class=\"sy0\">+=<\/span><span class=\"st0\">&quot;&lt;a rating='&quot;<\/span><span class=\"sy0\">+<\/span>i<span class=\"sy0\">+<\/span><span class=\"st0\">&quot;' class='gridRatingMarker'&gt;&lt;\/a&gt;&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r_val<span class=\"sy0\">+=<\/span><span class=\"st0\">&quot;&lt;\/div&gt;&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">setCValue<\/span><span class=\"br0\">&#40;<\/span>r_val<span class=\"sy0\">,<\/span>val<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">getValue<\/span><span class=\"sy0\">=<\/span><span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw1\">this<\/span>.<span class=\"me1\">cell<\/span>.<span class=\"me1\">orig_val<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; eXcell_rating.<span class=\"kw1\">prototype<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> eXcell<span class=\"sy0\">;<\/span><\/div><\/div>\n<p>&nbsp;<br \/>\nThat&#8217;s all. Now we&#8217;ve got a rating control inside the grid column. You can <a href=\"https:\/\/dhtmlx.com\/x\/download\/regular\/tutorials\/rating_exCell_in_grid.zip\">download the demo<\/a> and customize the code of this custom exCell for your needs and add necessary interactivity to the rating bar. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>This quick tutorial leads you through the steps of adding a simple star rating bar in a cell of dhtmlxGrid. You&#8217;ll learn how to create a custom exCell (&#8220;extended &#8230;<\/p>\n","protected":false},"author":2,"featured_media":3341,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17,71,1],"tags":[33,6,14],"class_list":["post-2085","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-posts-for-codeproject-com","category-tutorials","category-uncategorized","tag-all-posts","tag-dhtmlxgrid","tag-tips"],"_links":{"self":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/2085","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/comments?post=2085"}],"version-history":[{"count":1,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/2085\/revisions"}],"predecessor-version":[{"id":8571,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/2085\/revisions\/8571"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media\/3341"}],"wp:attachment":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media?parent=2085"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/categories?post=2085"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/tags?post=2085"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}