c# - 轴 #0 的数据列不能是字符串类型 - Google 图表

标签 c# javascript asp.net-mvc charts google-visualization

我试图在 Google 图表中显示一些数据,但出现此错误:

Data column(s) for axis #0 cannot be of type string..

我有这个类的两个属性:

public class GAStatistics
{
    public string Date { get; set; }
    public string Visitors { get; set; }
}

我正在从这个 Controller 传递这些属性的列表:

public class GAStatisticsController : Controller
{
    
     //GET: /ShopStatistics/


    public ActionResult GetData()
    {
        return Json(CreateCompaniesList(), JsonRequestBehavior.AllowGet);
    }


    private IEnumerable<GAStatistics> CreateCompaniesList()
    {
        
        List<GAStatistics> ListGaVisitors = new List<GAStatistics>();

        foreach (var row in d.Rows)
        {

            GAStatistics GaVisits = new GAStatistics(row[0], row[1]);
            ListGaVisitors.Add(GaVisits);
        }
        

        return ListGaVisitors;
   
    }

}

我从 Controller 传递列表到这个 View :

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
    
    <script type="text/javascript">
    
        google.load("visualization", "1", { packages: ["corechart"] });
        google.load("visualization", "1", { packages: ["treemap"] });
        google.setOnLoadCallback(drawChart);
        function drawChart() {
            $.get('/GAStatistics/GetData', {},
                function (data) {
                    var tdata = new google.visualization.DataTable();
    
                    tdata.addColumn('string', 'Date');
                    tdata.addColumn('string', 'Visitors');
            
    
                    for (var i = 0; i < data.length; i++) {
                        //tdata.addRow([data[i].Year, data[i].Salary, data[i].Expense]);
                        tdata.addRow([data[i].Date, data[i].Visitors]);
                    }
    
    
    
                    var options = {
                        title: "Expenses, salary For the current year"
                    };
    
                    var chart1 = new google.visualization.AreaChart(document.getElementById('chart_div1'));
    
                    chart1.draw(tdata, options);

                });
    
    
        }
    </script>

有什么想法吗?

最佳答案

我测试了您的示例,发现主要问题是因为第二列 Visitors 应该是数字而不是字符串。

我已经替换了 tdata.addColumn('number', 'Visitors'); 行中的列类型并在循环内添加了 parseInt:

tdata.addColumn('date', 'Date');
tdata.addColumn('number', 'Visitors');

// sample data: var data = [{ Date: "20140124", Visitors: "873" }, { Date: "20140125", Visitors: "875" }];
for (var i = 0; i < data.length; i++) {
    var dateStr = data[i].Date.substr(0, 4) + "-" + data[i].Date.substr(4,2) + "-" + data[i].Date.substr(6,2);
    tdata.addRow([new Date(dateStr), parseInt(data[i].Visitors)]);
}

第一列 Date 也可以保留为 string,但我将其类型替换为 date 并添加了 new Date 转换也是如此。

关于c# - 轴 #0 的数据列不能是字符串类型 - Google 图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22413879/

相关文章:

javascript - 我如何在javascript中创建一个搜索栏

javascript - 使用 Javascript 在浏览器中以编程方式打开 "View Source"HTML 窗口?

c# - 标 checkout 现不止一次 QuickFix

c# - 没有新 C# 的构造函数

C# TagLib 为 Mp3 设置专辑封面

asp.net-mvc - MVC3 自定义输出缓存

c# - asp.net MVC 4 0x80070005 - Javascript 运行时错误 : access denied

c# - 如果从除我的系统之外的任何系统发布,带有代码签名证书的 Clickonce 应用程序将被组策略阻止

javascript - 如何使用 jspdf-Autotable 在表格中添加自定义最后一行

sql - 存储过程始终返回 -1(asp.net MVC、Entity、SQL)