我正在尝试让Google Charts处理来自DataContext(db)的数据。 使用此代码:
public JsonResult getYearChart(clientId)
{
DataDataContext db = new DataDataContext();
var alldata = (from deba in db.debViews
where deba.ClientID == clientId
group deba by deba.Date.Value.Month
into grp
select new
{
Month = grp.Key,
Price = grp.Sum(x => x.Price)
}).ToList();
var cols = new[] { new { Month ="Month", Price ="Total" } };
var ret = new[]
{
new { data = cols.Select(x => new string[] { x.Month, x.Price }) },
new { data = alldata.Select(x => new string[] { x.Month.ToString(), Convert.ToString(x.Price) }) }
};
和Json一起回来 这不起作用,它只是给了我“没有足够的列来绘制所请求的图表”。使用DataContext中的数据使Google图表动态化的最佳做法是什么?
这是我用来绘制带有Json响应的图表的JavaScript。
google.load("visualization", "1", { packages: ["corechart"] });
google.setOnLoadCallback(drawChart);
function drawChart() {
$.post('Ex/getYearChart', {},
function (data) {
var tdata = new google.visualization.DataTable();
var rows = data.length;
var cols = data[0].length;
tdata.addColumn('string', data[0][0]);
for (var i = 0; i < cols; i++) {
tdata.addColumn('number', data[0][i]);
}
tdata.addRows(data.length);
for (var i = 1; i < data.length; i++) {
tdata.setCell(i, 0, data[i][0]);
for (var j = 1; j < cols; j++) {
var value = parseInt(data[i][j]);
tdata.setCell(i, j, value);
}
}
var options = {
title: 'Test Chart',
isStacked: true,
width: 500,
height: 400,
vAxis: { title: "More Text" },
hAxis: { title: "Date" }
};
var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
chart.draw(tdata, options);
}
)}
答案 0 :(得分:0)
在您举例说明data
的内容之前,我无法确定问题是什么,但我知道这会给您带来问题,即使没有问题{{1 }}:
data
您应该从tdata.addColumn('string', data[0][0]);
for (var i = 0; i < cols; i++) {
tdata.addColumn('number', data[0][i]);
}
而不是i
开始递增1
,因为您已经为每行中的第一个元素添加了一列。