【发布时间】:2014-05-30 20:40:44
【问题描述】:
我正在开发一个 ASP.NET MVC 3 项目,该项目需要我通过用户输入上传 a.xls / .xlsx,将其加载到 DataTable 中并将其可视化放置在视图中。
听起来很简单......
我能够创建 DataTable 并将对象传递回视图,但是我无法通过 Google 的可视化 API 在视图上呈现数据表——我看到的所有示例都需要静态表示的字段,即:
var data = new google.visualization.DataTable();
data.addColumn('string', 'Task');
data.addColumn('number', 'Hours per Day');
data.addRows([
['Work', 11],
['Eat', 2],
['Commute', 2],
['Watch TV', 2],
['Sleep', {v:7, f:'7.000'}]
]);
但是,由于我的应用程序正在接受用户输入,因此列标题、维度和内容都是动态的。我正在寻找一种动态添加数据的方法。这是我目前拥有的代码,其中 Model 是传入的 DataTable:
@model System.Data.DataTable
@using GridMvc.Html
@{
ViewBag.Title = "File Upload";
<h2>@ViewBag.Message</h2>
}
<html>
<head>
<script type='text/javascript' src='https://www.google.com/jsapi'></script>
<script type='text/javascript'>
google.load('visualization', '1', { packages: ['table'] });
google.setOnLoadCallback(drawTable);
function drawTable( Model ) {
var data = new google.visualization.DataTable();
var numRows = Model.Rows.Count;
var numCols = Model.Rows[0].Count;
for (var i = 0; i < numCols; i++)
data.addColumn('string', Model.Rows[0].ItemArray[i]);
for (var i = 1; i < numRows; i++)
data.addRow(Model.Rows[i].ItemArray);
//data.addRows([['2967773', '13-1014428', '', 'Not Recommended -Internship', '7- Not Recommended',
// 'University 1', '', '', '', '', '', '', '' ]]);
var table = new google.visualization.Table(document.getElementById('table_div'));
table.draw(data, { showRowNumber: true });
}
</script>
</head>
<body>
<div id='table_div'></div>
</body>
<p>Done</p>
</html>
有人知道怎么做吗? 提前致谢!
【问题讨论】:
-
仅供参考,ASP.net
DataTable与 Google Visualization APIDataTable不同。如果要使用 ASP.net DataTable,则需要将其内容解析为 Visualization API DataTable。您可能想研究在服务器端创建兼容的对象并将其输出为 JSON 字符串。
标签: c# javascript asp.net asp.net-mvc-3 google-visualization