1

次のコードがあります。

 //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()) は存在しません。それがまさに私が起こりたいことです。フィルター処理されたテーブルの新しい列の値を取得する方法についてのアイデアはありますか?

4

1 に答える 1

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();
于 2013-02-06T01:22:45.737 に答える