C#Google Chart JSON,没有足够的列来绘制所请求的图表

时间:2014-04-17 09:20:41

标签: c# asp.net-mvc json google-visualization

我正在尝试让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);

}
    )}

1 个答案:

答案 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,因为您已经为每行中的第一个元素添加了一列。