Google饼图未在浏览器中显示

时间:2014-11-10 18:43:17

标签: javascript c# .net google-visualization

我正在尝试从List对象填充数据表,然后在饼图中显示结果。由于某些原因,我无法识别饼图未在浏览器中显示(空白页)。以下是我的代码。有人可以尝试运行此代码,并确定是错误!...因为我无法识别是不是我错了。

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">
        google.load("visualization", "1", { packages: ["corechart"] });
        google.setOnLoadCallback(drawChart);
        function drawChart(dataValues) {

            var data = new google.visualization.DataTable();
            data.AddColumn('string', 'Locality');
            data.AddColumn('number', 'Frequency');

            for (var i = 0; i < dataValues.length; i++) {
                data.AddRow(dataValues[i].aString, dataValues[i].anInt);
            }

            var options = { 'title': 'Pie Chart Test',
                'width': 900,
                'height': 500
            };

               var chart =  new google.visualization.PieChart(document.getElementById('piechart'));
               chart.draw(data, options);
        }
    </script>
  </head>
  <body>
    <div id="piechart" style="width: 900px; height: 500px;"></div>
  </body>
</html>

背后的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Script.Serialization;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            List<Items> dataList = new List<Items>();
            dataList.Add(new Items("A", 10));
            dataList.Add(new Items("B", 20));
            dataList.Add(new Items("C", 30));

            JavaScriptSerializer jss = new JavaScriptSerializer();

            ClientScript.RegisterStartupScript(this.GetType(), "Test", string.Format("<script type=\"text/javascript\">drawVisualization({0});</script>", jss.Serialize(dataList)));
        }
    }

    public class Items
    {
        public string aString = "";
        public int anInt = 0;

        public Items(string _aString, int _anInt)
        {
        aString = _aString;
        anInt = _anInt;
        }
    }
}

谢谢

1 个答案:

答案 0 :(得分:1)

JavaScript区分大小写。方法名称为.addColumn().addRow(),但您使用的是.AddColumn().AddRow()。检查JavaScript控制台是否有错误。您应该找到类似undefined is not a function的消息。

.addRow()方法将数组作为参数,但是您传入两个标量值。用方括号包裹它们:data.addRow([dataValues[i].aString, dataValues[i].anInt])

您使用RegisterStartupScript()时可能会遇到问题。您的启动脚本可能在可视化程序包加载完成之前运行。相反,我会将值嵌入页面的隐藏字段中,并从脚本中读取该值。

<asp:HiddenField runat="server" ID="ChartData" />
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        List<Items> dataList = new List<Items>();
        dataList.Add(new Items("A", 10));
        dataList.Add(new Items("B", 20));
        dataList.Add(new Items("C", 30));

        JavaScriptSerializer jss = new JavaScriptSerializer();

        this.ChartData.Value = jss.Serialize(dataList);
    }
}
function drawChart() {
    var dataValues = JSON.parse(document.getElementById("<%= ChartData.ClientID %>").value);
    // The rest of the function as written
}

应用了所有更改的代码段:

google.load("visualization", "1", { packages: ["corechart"] });
google.setOnLoadCallback(drawChart);
function drawChart() {
    var dataValues = JSON.parse(document.getElementById("ChartData").value);
    var data = new google.visualization.DataTable();
    data.addColumn('string', 'Locality');
    data.addColumn('number', 'Frequency');

    for (var i = 0; i < dataValues.length; i++) {
        data.addRow([dataValues[i].aString, dataValues[i].anInt]);
    }

    var options = { 'title': 'Pie Chart Test',
        'width': 900,
        'height': 500
    };

    var chart =  new google.visualization.PieChart(document.getElementById('piechart'));
    chart.draw(data, options);
}
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<input type="hidden" id="ChartData" value="[{&quot;aString&quot;:&quot;A&quot;,&quot;anInt&quot;:10},{&quot;aString&quot;:&quot;B&quot;,&quot;anInt&quot;:20},{&quot;aString&quot;:&quot;C&quot;,&quot;anInt&quot;:30}]" />
<div id="piechart" style="width: 900px; height: 500px;"></div>