This is how I achieved what you are trying to do.

After your `table.draw()` call - add the following jQuery to add a footer 
row to the already created table

        // Firstly here, we assign the table element to the variable 
mytable_foot
        // #chart2 is the div that you have attached and drawn your table to
        // table is the actual table that the chart API creates dynamically
        var mytable_foot = jQuery('<tfoot>').appendTo("#chart2 table"); 

    // Now we just append a row to the table using append()
    // Just need to make sure it has a <tr> wrapper and uses <th> not <td> 
for cells
    // Make sure the number of rows match the parent table - I use the 
google formatting classes to format the data
    // You can also add custom css by referencing: #chart2 table tfoot th {}
    mytable_foot.append('<tr>'+
          '<th class="google-visualization-table-td">Total</th>'+
          '<th class="google-visualization-table-type-number 
google-visualization-table-td">21,133</th>'+
          '<th class="google-visualization-table-type-number 
google-visualization-table-td">21,427</th>'+
          '<th class="google-visualization-table-type-number 
google-visualization-table-td">-294</th>'+
    '</tr>');



On Wednesday, 10 July 2019 10:07:36 UTC+10, Noel wrote:
>
> Hello Everyone,
>
> I've researched this many times and haven't found a way to lock the total 
> row in a Google Chart Table, so that it does not get sorted and stays 
> locked as the last row on my table.
>
> Below is my current code for the chart and table.  Thank you in advance 
> for any advice.
>
> Regards,
>
> Noel
>
>
> [image: Total Row Locking.jpg]
>
>
>
> <!DOCTYPE html>
> <html>
>
>  <script type="text/javascript" src="//www.google.com/jsapi"></script>
>     <script type='text/javascript' src='
> http://code.jquery.com/jquery-2.1.0.min.js'></script>
>   
>         <script type='text/javascript' src='//
> netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js'></script>
>     <link rel="stylesheet" type="text/css" href="//
> netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css">
>
>       <script type="text/javascript" src="
> https://www.google.com/jsapi?fake=.js";></script>
>
>   <style id="compiled-css" type="text/css">
>    .google-visualization-table-td {
> text-align: left !important;
> }
>
>   .header {
>     background-color: #1977CF;
>     font-size: 14px;
>     color: white;
>     height: 50 px;
>     position: relative;
>   }
>
>   .right-text {
>     text-align: left;
>   }
>
>   .grey-background {
>     background-color: #F2F2F2;
>   }
>   
>   .yellow-background {
>     background-color: #FEF200;
>   }
>   
>   .white-background {
>     background-color: white;
>   }
>   
>     
>   </style>
>
>   <!-- TODO: Missing CoffeeScript 2 -->
>
>   <script type="text/javascript">
>
>
>     
> google.load('visualization', '1.1', {packages: ['controls']});
> google.setOnLoadCallback(drawVisualization);
>
> function drawVisualization() {
>     // Prepare the data
>     var data = google.visualization.arrayToDataTable([
>         ['Country', '2019', '2018','Varience'],
> [' Unites States ', 1398 , 1417 , -19 ],
> [' Japan ', 1854 , 2195 , -341 ],
> [' Germany ', 2633 , 2149 , 484 ],
> [' United Kingdom ', 4900 , 5633 , -733 ],
> [' China ', 1894 , 2198 , -304 ],
> [' France ', 1216 , 1045 , 171 ],
> [' Spain ', 1053 , 1073 , -20 ],
> [' Portugal ', 1147 , 1117 , 30 ],
> [' Brazil ', 2224 , 2008 , 216 ],
> [' Canada ', 405 , 506 , -101 ],
> [' Argetina ', 252 , 294 , -42 ],
> [' Hong Kong ', 899 , 689 , 210 ],
> [' Russia ', 1258 , 1103 , 155 ],
>
>
>     ]);
>     // Define which column shows up/down arrows
>    var formatter = new google.visualization.ArrowFormat();
>     formatter.format(data, 3);
>     
>     
>  
>     
>
>     
>      // Define a category picker control for the Gender column
>     var categoryPicker = new google.visualization.ControlWrapper({
>         controlType: 'CategoryFilter',
>         containerId: 'control3',
>         options: {
>             filterColumnLabel: 'Country',
>             ui: {
>                 label: '',
>                 labelStacking: 'vertical',
>                 allowTyping: false,
>                 allowMultiple: true,
>                 caption: 'Country'
>             }
>         }
>     });
>
>
> var stringFilter = new google.visualization.ControlWrapper({
>           'controlType': 'StringFilter',
>           'containerId': 'control4',
>           'options': {
>           'filterColumnLabel': 'Services',
>           'ui': {'labelStacking': 'vertical'}
>           }
>         });
>    
>
>     // Define a Pie chart
>     var pie = new google.visualization.ChartWrapper({
>         chartType: 'PieChart',
>         containerId: 'chart1',
>         options: {
>             width: 430,
>             height: 300,
>             title: '',
>             //is3D: true,
>             pieHole: 0.4,
>             chartArea: {
>                 left: 15,
>                 top: 15,
>                 right: 0,
>                 bottom: 0
>             },
>               legend: {
>       alignment: 'center',
>       position: 'right'
>     },
>             pieSliceText: 'number'
>         },
>         // Instruct the piechart to use colums 0 (Name) and 3 (Donuts 
> Eaten)
>         // from the 'data' DataTable.
>         view: {
>             columns: [0, 1]
>         }
>     });
>     
>      // Define a table style
>      var cssClassNames = {
>         'headerRow': 'header',
>         'tableRow': '',
>         'oddTableRow': 'grey-background',
>         'selectedTableRow': '',
>         'hoverTableRow': 'yellow-background',
>         'headerCell': 'gold-border',
>         'tableCell': '',
>         'rowNumberCell': ''}; 
>
>   
>     // Define a table
>     var table = new google.visualization.ChartWrapper({
>         chartType: 'Table',
>         containerId: 'chart2',
>         options: {
>             width: '350px',
>             showRowNumber: false,
>             allowHtml: true,
>             cssClassNames: cssClassNames,
>         }
>     });
>     
>     
>     
>      google.visualization.events.addListener(pie, 'ready', function () {
>         var dt = pie.getDataTable().toDataTable();
>         var totals = google.visualization.data.group(dt, [{
>             type: 'number',
>             column: 0,
>             // make all values the same
>             modifier: function () {return 0;}
>         }], [{
>             type: 'number',
>             column: 1,
>             aggregation: google.visualization.data.sum
>         }, {
>             type: 'number',
>             column: 2,
>             aggregation: google.visualization.data.sum
>         }, {
>             type: 'number',
>             column: 3,
>             aggregation: google.visualization.data.sum
>         }]);
>         dt.addRow(['Total', totals.getValue(0, 1), totals.getValue(0, 2), 
> totals.getValue(0, 3)]);
>         table.setDataTable(dt);
>         table.draw();
>     });
>     
>     
>     // Create a dashboard
>     new 
> google.visualization.Dashboard(document.getElementById('dashboard')).
>     // Establish bindings, declaring the both the slider and the category
>     // picker will drive both charts.
>     bind([categoryPicker], [table, pie], [stringFilter, table]).
>     
>      
>
>     // Draw the entire dashboard.
>     draw(data, {'allowHtml':true, 'cssClassNames': 'cssClassNames'});
>     
>     
>      changeOptions = function() {
>          pie.setOption('is3D', true);
>          pie.draw();
>         };
>         
>         changeOptions2 = function() {
>          pie.setOption('is3D', false);
>          pie.draw();
>         };
> }
>
>
> </script>
>
> <body>
>     <div id="dashboard">
>     <table>
>         <tbody>
>             <tr style="vertical-align: top;">
>                 <td style="width: 300px; font-size: 1em;">  
>                     <div style="border: 0px solid #ccc; margin-left: 0px; 
> margin-top: 0px; padding-right:20px" id="chart1"></div>
>                     
>              
> <div style="width: 100%; display: table;">
>     <div style="display: table-row">
>         <div style="width: 110px; display: table-cell;"> <div>
>               <button style="margin: 0em 1em 1em 1em" 
> onclick="changeOptions();">
>                 Make 3D
>               </button>
>             </div>
>             <script type="text/javascript">
>               function changeOptions() {
>                 pie.setOption('is3D', true);
>                 pie.draw();
>               }
>             </script> </div>
>         <div style="display: table-cell;"> <div>
>               <button onclick="changeOptions2();">
>                 Make Flat
>               </button>
>             </div>
>             <script type="text/javascript">
>               function changeOptions2() {
>                 pie.setOption('is3D', false);
>                 pie.draw();
>               }
>             </script> </div>
>     </div>
> </div>
>                     
>                 </td>
>                 <td style="width: 300px;">
>                     <div style="margin: 0em 10em 1em 0em" 
> id="control3"></div>
>                     <div style="float: left;" id="chart2"></div>
>                  </td>
>              </tr>
>         </tbody>
>     </table>
> </div>
>
>   <script>
>     // tell the embed parent frame the height of the content
>     if (window.parent && window.parent.parent){
>       window.parent.parent.postMessage(["resultsFrame", {
>         height: document.body.getBoundingClientRect().height,
>         slug: "rEhUp"
>       }], "*")
>     }
>
>     // always overwrite window.name, in case users try to set it manually
>     window.name = "result"
>   </script>
> </body>
> </html>
>
>
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google Visualization API" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/google-visualization-api.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-visualization-api/9d8c5890-9442-4047-a8df-785c32604c7e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to