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);
}
    )}

asp.net mvc-C#谷歌图表JSON,没有足够的列来绘制请求的图表

在你给出data内容的例子之前,我不能确定问题是什么,但我知道这会给你带来问题,即使data:没有问题

tdata.addColumn('string', data[0][0]);
for (var i = 0; i < cols; i++) {
    tdata.addColumn('number', data[0][i]);
}

您应该从1而不是0开始递增i,因为您已经为每行的第一个元素添加了一列。