在更改控件包装器后从图表包装器表中检索行数据

时间:2016-05-19 13:35:39

标签: google-visualization google-chartwrapper

我有一个图表包装器表和一个绑定到它的'select'事件监听器,用于检索行数据,如下所示:

var table = new google.visualization.ChartWrapper({
                    'chartType': 'Table',
                    'containerId': 'tableDiv',
                    'options': {
                        'allowHtml': true,
                        'page': 'enable',
                        'width':'100%',
                        'height':'270px',
                        'pageSize': 10,
                    }
                });

google.visualization.events.addListener(table, 'ready', function () {

                    google.visualization.events.addListener(table, 'select', function(){
                                 var selection = table.getChart().getSelection();
                                 var row = selection[0].row;

                                 var x=dataTable.getValue(row, 1); 
                                 var y=dataTable.getValue(row,3);
                    });
});

现在,当我在桌子的第一页或显示完整的表格时,此功能正常。但是,一旦完成某些排序/过滤/分页,检索到的行数据就是假的,因为隐藏的行不计算在内。

示例:我有一个包含10行的表。在每一个中都有一个字符串 - 'row1','row2','row3'......'row10'。然后我使用控件包装器来过滤表,这样只有5-10行可见。当我现在点击第5行时,它将其计为第1行,我不再获得正确的数据。

我有什么想法可以解决这个问题吗?

由于

2 个答案:

答案 0 :(得分:1)

而不是使用原始dataTable

使用ChartWrapper

中的一个

这将返回过滤的数据表

google.visualization.events.addListener(table, 'select', function(){
  var selection = table.getChart().getSelection();
  var row = selection[0].row;

  var x=table.getDataTable().getValue(row, 1); 
  var y=table.getDataTable().getValue(row,3);
});

答案 1 :(得分:0)

我有类似的问题,但在我的情况下需要检索Chartwrapper中表格未显示的列中的值。幸运的是我的表中有一个唯一的索引,所以我抓住了这个值,然后过滤了dataTable的行以找到包含该值的行索引,然后将该值转换为整数,最后用它来选择正确的行,选择后从中选择一个值,在这种情况下是一个在新窗口中打开的URL

var view = new google.visualization.DataView(dataTable);
view.setRows(view.getSortedRows({column: 11, desc: true}));
view.setColumns([11,0,2,3,4,5,6,7,8,9]);

//create the handler for the selection on the table
google.visualization.events.addListener(table, 'select', selectHandler);

    function selectHandler() {
    var selection = table.getChart().getSelection();
    for (var i = 0; i < selection.length; i++) {
        var item = selection[i];
        if (item.row != null) {
            var id = table.getDataTable().getValue(item.row,0);
            var urlRow = dataTable.getFilteredRows([{column: 11, value: id }]);
            urlRow = parseInt(urlRow);
            var url = dataTable.getFormattedValue(urlRow, 10);
            window.open(url,'_blank');
        }
    }
}