2

我使用Google HTML服務創建了一個Google可視化儀表板。底層數據表(jjdt)是從幾個數據表(如jadt2,fa)中加入的。如何更新谷歌可視化儀表板的底層google datatable並刷新儀表板視圖?

jjdt = google.visualization.data.join(jadt2,fa,'left',[[0,0]],[1,2,3,4,5,6,7,8,9,10,11],[2,3]); 

然後我創建了一個圖表包裝(finalTable)來顯示儀表板中的表格。

finalTable = new google.visualization.ChartWrapper({ 
    'chartType': 'Table', 
    'containerId': 'table-div', 
    'options': { 
     'showRowNumber': false, 
     'width': '100%', 
     'height': '100%', 
     'allowHtml': true, 
     'pageSize': 20 
    } 
    }); 

dashboard.bind(wwPicker, [finalTable]); 
dashboard.draw(jjdt); 

這些代碼工作正常。

現在我想要做的就是允許單擊按鈕來將基礎表(jjdt)中的某些單元格設置爲新值並使其反映在儀表板上。但這並不像我想象的那麼簡單。

我試圖兩兩件事:

1)使用JavaScript來更新對應的小區(X,Y的jjdt表),並調用finalTable.draw();

jjdt.setCell(x,y,'New Value'); 
    finalTable.draw(); 

但是這沒有效果,也沒有錯誤信息。

2)我想也許圖表包裝創建了一個datatable的副本。所以,我試圖獲取數據表背:

var mydt = finalTable.getDataTable(); 
mydt.setCell(x,y,'New Value'); 
finalTable.draw(); 

我認爲這是在文檔中描述的https://developers.google.com/chart/interactive/docs/reference#methods_4

documentation

但是正確的方法,我得到了一個錯誤信息說setCell不是一個函數mydt,儘管我可以調用mydt.getValue()。似乎我的數據表是「以某種方式」只讀?但它是一個DataTable不是DataView ..爲什麼?

enter image description here

回答

0

我試過PaulH的建議,但它仍然不起作用。

但經過一番深入挖掘,我終於找到了解決方案。問題是我調用SetCell的方式不會更新單元格的「格式化值」。這就是爲什麼我甚至認爲我更新了表格單元格的「值」,其格式與之前保持一致。

做正確的方法是:

jjdt.setCell(x,y,'New Value','New Display Value'); 

而且這種方式僅「新顯示值」將表圖表中顯示出來。但圖表將根據「新價值」進行排序。

此外,更新的觀點,似乎要麼調用

dashboard.draw(jjdt) 

finalTable.draw() 

將有同樣的效果。所以我只是用finalTable.draw()更新表。

希望這可以幫助別人。

0

儀表板需要知道關於修改dataTable的,所以我在您的解決方案1)添加一行

jjdt.setCell(x,y,'New Value'); 
dashboard.draw(jjdt); // added line 
finalTable.draw(); 

方案二)不起作用,因爲getDataTable()是ChartWrapper的方法類,它不是Dashboard類的方法,因此您的「不是函數」錯誤消息。