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



我有一个图表包装表和一个绑定到它的"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'..."第 10 行"。然后,我使用控件包装器筛选表,以便只有第 5-10 行保持可见。当我现在单击第 5 行时,它将其计为第 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);
});

我遇到了类似的问题,但就我而言,需要检索图表包装器中表格未显示的列中的值。幸运的是我的表中有一个唯一的索引,所以我抓取了这个值,然后过滤了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');
        }
    }
}

最新更新