asp.net mvc-C#谷歌图表JSON,没有足够的列来绘制请求的图表
本文关键字:请求 绘制 mvc-C# net 谷歌 JSON asp | 更新日期: 2023-09-27 17:58:48
我正试图让谷歌图表使用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) }) }
};
和杰森一起回来
这不起作用,它只会让我"没有足够的列来绘制所需的图表"。使用DataContext中的数据使谷歌图表动态的最佳实践是什么?
这是我用来绘制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);
}
)}
在你给出data
内容的例子之前,我不能确定问题是什么,但我知道这会给你带来问题,即使data
:没有问题
tdata.addColumn('string', data[0][0]);
for (var i = 0; i < cols; i++) {
tdata.addColumn('number', data[0][i]);
}
您应该从1
而不是0
开始递增i
,因为您已经为每行的第一个元素添加了一列。