将数据表转换为Google Charts数据表

问题描述 投票:1回答:1

我想将数据表转换为可以输入到.Net MVC应用程序中的Google Charts的格式。我从数据库中检索数据并将其放在C#数据表中。现在,我想将其转换为Google图表可以理解的格式。我已经包含了到目前为止的代码。我不断从Google图表中收到错误消息:“第一行不是数组。”:]

    //Controller
    public static string GetData()
    {
        String sql = "Select * from someTable";
        //Run above sql against database and get back a DataTable
        DataTable dt = new Utility().ConnectionUtility(sql);
        //Convert DataTable to Json Object (I followed this link: https://codepedia.info/convert-datatable-to-json-in-asp-net-c-sharp/)
        return JsonConvert.SerializeObject(dt);
    }

   //View
    <div id="barChart" style="width:750px; height: 400px;"></div>

    <script>
    // Here We will fill chartData
    $(document).ready(function () {
        $.ajax({
            url: "GetData",
            dataType: "json",
            contentType: "application/json; chartset=utf-8",
            success: function (data) {
                chartData = data;
            },
            error: function (xhr, status, error) {
                alert('Message');
            }
        }).done(function () {
            // after complete loading data
            google.setOnLoadCallback(drawChart);
            drawChart();
        });
    });
    function drawChart() {
        var datapie = google.visualization.arrayToDataTable(chartData);

        var options = {
            title: "Test Execution",
            width: 600,
            height: 400,
            bar: { groupWidth: "75%" },


        };
        var Chartpie = new google.visualization.BarChart(document.getElementById('barChart'));
        Chartpie.draw(datapie, options);
    }
    </script>
c# datatable asp.net-mvc-5 google-visualization
1个回答
0
投票

也许已经有点晚了,但是今天我遇到了同样的情况。

在控制器端,您需要根据图表类型来调整数据形状。然后从您的角度来看,只需使用google.visualization.arrayToDataTable(Your Data);这是示例代码...

 [HttpPost]
        public JsonResult AjaxMethod()
        {

            List<object> chartData = new List<object>();
            chartData.Add(new object[]
                        {
                            "HEADER1", "HEADER_NUMERIC_AREA"
                        });

//get data table from sql.
            DataTable DT = Direkbaglan.DBListele(" SELECT  [StockName] ,[Weight]   FROM STOCKS ");

            for (int i = 0; i < DT.Rows.Count; i++)
            {
                chartData.Add(new object[]
                 {
                            DT.Rows[i][0], DT.Rows[i][1]
                 });

            }
            return Json(DT);
        }

查看侧

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    <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() {
            $.ajax({
                type: "POST",
                url: "/Home/jsongonder",
                data: '{}',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (r) {
                    var data = google.visualization.arrayToDataTable(r);

                    //Pie
                    var options = {
                        title: 'Stock Info (weight)'
                    };
                    var chart = new google.visualization.PieChart($("#chart1")[0]);
                    chart.draw(data, options);
                },
                failure: function (r) {
                    alert(r.d);
                },
                error: function (r) {
                    alert(r.d);
                }
            });
        }
    </script>
    <div id="chart1" style="width: 500px; height: 400px;">
    </div>

</body>
</html>
© www.soinside.com 2019 - 2024. All rights reserved.