簡體   English   中英

過濾並重繪google.visualization.DataTable時需要重新計算列值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM