2014-03-24 106 views
0

我有一个dataTable与几列。我从这张数据表的视图构建图表。当点击图表图例中的项目时,我想获取底层数据表的列。谷歌可视化getColumnId

代码:

var score_select = google.visualization.events.addListener(score_chart, 'select', function(){ 
     var chrt = score_chart.getChart().getSelection()[0].column;//I'm using a chartWrapper 
     var dt = score_chart.getDataTable().getColumnId(chrt); 
     var dt_check = score_chart.getDataTable().getNumberOfColumns(); 
     alert(dt); 

     \\ alert(dt_check) returns proper number of columns 
    }); 

问题:

通过chrt提到的列数等于所述视图NOT基础DataTable的列数的列数。我的意思是,如果dataTable有10列,并且score_chart所使用的dataTable的视图只有2列chrt将返回1或2,而不管在视图中使用了dataTable中的哪些列。这导致getColumnId(...)返回一个与我想要的不同的列。

任何建议将是一个很大的帮助。谢谢

回答

1

假设您的视图在ChartWrapper的view参数中指定,您需要引用view.columns数组以获取对底层DataTable的列索引引用。另外,由于select事件触发当用户取消选择的元素,可能的是,选择的元件的阵列是空的,这将导致该行来引发错误:

var chrt = score_chart.getChart().getSelection()[0].column; 

所以需要测试的长度该数组(如果图表中启用了多选,可能会遍历所有数组元素)。该代码应该是这样的:

var score_select = google.visualization.events.addListener(score_chart, 'select', function(){ 
    var selection = score_chart.getChart().getSelection(); 
    if (selection.length) { 
     var chrt = selection[0].column; 
     var dt = score_chart.getDataTable().getColumnId(chrt); 
     var dt_check = dt.getNumberOfColumns(); 

     var view = score_chart.getView(); 
     var dtColumnIndex = view.columns[chart]; 

     alert('The selected column is ' + dt.getColumnLabel(dtColumnIndex)); 
    } 
}); 

这假定view.columns只包含列引用 - 如果它包含计算列,你必须决定你想与那些做什么。