2013-02-04 62 views
1

我有以下代碼:需要重新計算列值時,過濾google.visualization.DataTable和重繪

//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())不存在。這正是我想要發生的事情。任何想法如何獲得過濾表的新列值?

回答

1

我的建議是把表數據到數據表先用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(); 
+0

完美!不知道我是如何錯過的。 – pnkflydgr