我有一个表,其中一个列有多个重复项。我想一次过滤列上具有相同值的所有行。我尝试使用getFormattedValue()
方法获取列的值,然后我应用了DataView的常用代码。当我单击该行时,除了所选行之外,它将消除表中的所有行,并且不会过滤列上具有重复值的所有行。到目前为止,这是我的代码:
var table = new google.visualization.Table(document.getElementById('chart_div'));
var items = " ";
table.draw(dataTable, {width: 1000, height: 300});
google.visualization.events.addListener(table, 'select',
function(event) {
var selection = table.getSelection();
var view = new google.visualization.DataView(dataTable);
for(i = 0; i < row.length; i++){
var items == dataTable.getFormattedValue(i, i);
if(items = "anti-social-behaviour"){
console.log("if statement");
view.setRows([selection[i].row]);
table.draw(view, []);
}
}
});
如果有人能够发现问题,我们将非常感激。谢谢。
答案 0 :(得分:1)
我发现此代码存在许多问题。首先,row
来自哪一行?
for(i = 0; i < row.length; i++){
其次,您正在测试数据集中(i, i)
的格式化值,该值检查(0, 0)
,然后(1, 1)
,然后检查(2, 2)
等,而不是检查整行或列。第三,在这些方面:
view.setRows([selection[i].row]);
table.draw(view, []);
您要将视图中使用的行设置为row
中i
元素的selection
属性(可能是undefined
,因为有i
没有什么可以阻止selection
的增长超过setRows
的长度。 google.visualization.events.addListener(table, 'select', function(event) {
var selection = table.getSelection();
if (selection.length) {
var filterView = new google.visualization.DataView(dataTable);
filterView.setColumns([{
type: 'string',
sourceColumn: 1, // set this column to be whatever column you want to check for duplicate values
calc: 'stringify'
}]);
var value = filterView.getValue(selection[0].row, 0);
var rows = filterView.getFilteredRows([{column: 0, value: value}]);
var view = new google.visualization.DataView(dataTable);
view.setRows(rows);
table.draw(view, []);
}
});
方法设置整个行集用于视图,因此每次调用时,都要将行设置为(最多)1行,然后绘制带有视图的表,这就是为什么你在表中只看到一行。
如果要过滤表格以仅显示值与所选行中的值匹配的行,则需要使用以下内容:
{{1}}