[英]Need to recalculate column values when google.visualization.DataTable is filtered and redrawn
我有以下代碼:
//creates a DataTable. don't worry about this. this works
var projectData = createDataView(json);
// Create and draw the visualization.
var table = new google.visualization.ChartWrapper({
chartType: "Table",
containerId: "projectChart"
});
// add user filter
var userFilter = new google.visualization.ControlWrapper({
'controlType': 'StringFilter',
'containerId': 'userFilter',
'options': {
'filterColumnLabel': 'User'
}
});
var dashboard = new google.visualization.Dashboard(
document.getElementById('projectChartContainer'))
.bind(userFilter, table);
function drawTable()
{
dashboard.draw(projectData, {
'allowHtml': true,
showRowNumber: true,
title: "Project Data",
width: middleWidth
});
// google visualization styles
$(".google-visualization-table-td-number").addClass("small");
$(".google-visualization-table-td-center").addClass("eighty");
}
// set width
middleWidth = $("#contentMiddle").width();
drawTable();
// if user resized the browser, change the width and redraw.
//this is ugly, but the only way i could find. 100% was buggy
$(window).resize( function() {
middleWidth = $(window).width()-142;
drawTable();
});
// add a change listener to table
google.visualization.events.addListener(table, 'ready', function() {
// get hour totals
var workedHours = 0;
var billedHours = 0;
// THIS IS WHERE I NEED HELP!!!!!
/*var dataLength = table.getNumberOfRows();
for (var x = 0; x < dataLength; x++)
{
workedHours += table.getValue(x, 7);
billedHours += table.getValue(x, 9);
}
$("#totalWorked").text(workedHours);
$("#totalBilled").text(billedHours);
$("#totalsContainer").show();*/
console.log(projectData.getValue(1,1));
});
只要表格顯示和過濾,一切都可以正常工作。 我需要的是一種方法來獲取新過濾的表的列總計。 我可以第一次使用projectData.getValue()獲取值,但是無論濾除什么內容,它都會返回相同的值。 我在新繪制的表中可能沒有行,它將顯示與最初相同的值。 我並不感到驚訝,因為我真的只是在改變桌子,聽着它被重畫。 但是我無法從表中獲取任何值。 我上面的表格功能(即... table.getNumberOfRows())不存在。 這就是我想發生的事情。 關於如何獲取已過濾表的新列值的任何想法?
我的建議是先使用var tableData = table.getDataTable();
將表數據轉換為數據表var tableData = table.getDataTable();
該dataTable將按照表中所示進行過濾和排序。 然后可以在tableData上運行for()循環:
for (var x = 0; x < tableData.getNumberOfRows(); x++)
{
workedHours += tableData.getValue(x, 7);
billedHours += tableData.getValue(x, 9);
}
$("#totalWorked").text(workedHours);
$("#totalBilled").text(billedHours);
$("#totalsContainer").show();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.