在 ASP.NET Web 表单应用程序中为动态数据实现 HighCharts 时面临的问题

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

这是我在 aspx 页面中使用的 HighCharts JS 代码:

Highcharts.chart('highcharts1', {
            chart: {
                type: 'bar'
            },
            title: {
                text: 'Number of MSMEs By District',
                align: 'left'
            },
            //subtitle: {
            //    text: 'Source: <a ' +
            //        'href="https://en.wikipedia.org/wiki/List_of_continents_and_continental_subregions_by_population"' +
            //        'target="_blank">Wikipedia.org</a>',
            //    align: 'left'
            //},
            xAxis: {
                //categories: ['Africa', 'America', 'Asia', 'Europe'],
                categories: JSON.parse(jsonDistrict),
                title: {
                    text: null
                },
                gridLineWidth: 1,
                lineWidth: 0
            },
            yAxis: {
                min: 0,
                title: {
                    text: 'Population (millions)',
                    align: 'high'
                },
                labels: {
                    overflow: 'justify'
                },
                gridLineWidth: 0
            },
            tooltip: {
                valueSuffix: ' millions'
            },
            plotOptions: {
                bar: {
                    borderRadius: '50%',
                    dataLabels: {
                        enabled: true
                    },
                    groupPadding: 0.1
                }
            },
            legend: {
                layout: 'vertical',
                align: 'right',
                verticalAlign: 'top',
                x: -40,
                y: 80,
                floating: true,
                borderWidth: 1,
                backgroundColor:
                    Highcharts.defaultOptions.legend.backgroundColor || '#FFFFFF',
                shadow: true
            },
            credits: {
                enabled: false
            },
            series: [{
                name: 'Year 1990',
                data: [631, 727, 3202, 721]
            }, {
                name: 'Year 2000',
                data: [814, 841, 3714, 726]
            }, {
                name: 'Year 2018',
                data: [1276, 1007, 4561, 746]
            }]
        });

我从 HighCharts 官方网站获取了这段代码,它显示了基于代码中提到的静态数据的图表,正如您可以看到的注释一样。现在我正在尝试实现相同的图表,但为 xAxis 类别以及系列数据生成动态数据。

我在后台有一个 CS 代码,它从 PLSQL 数据库获取地区名称并生成格式如下的 json ['ABC','XYZ','PQR']:

protected string BindDataToChart()
        {
            DataTable dt = objBO.Get_MSME_Chart_Data(new object[] { null });
            List<string> districtName = new List<string>();

            foreach(DataRow row in dt.Rows)
            {
                districtName.Add(row["DISTRICT_NAME"].ToString());
            }

            string jsonDistrict = JsonConvert.SerializeObject(districtName, Formatting.Indented);

            return jsonDistrict;
           
        }

但是,我无法发送在 CS 文件中生成的地区名称,并在我的 aspx 页面中的 JS 代码 xAxis 类别中附加相同的名称。在过去的两天里,我已经从官方 HighCharts 网站到 StackOverflow 浏览了一些在线资源,但我仍然没有成功。

我也以类似的方式获取计数,我想在 JS 代码系列数据中实现它。

抱歉我的英语不好,感谢您帮助我。

javascript c# asp.net json highcharts
1个回答
0
投票

我已经为您创建了一个完整的功能示例。 这是“Default.aspx”页面:

<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebFormHighChart._Default" %>

    <!DOCTYPE html>

    <html lang="en">
    <head runat="server">
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title><%: Page.Title %> - My ASP.NET Application</title>

        <script src="https://code.highcharts.com/highcharts.js"></script>
        <script src="https://code.highcharts.com/modules/series-label.js"></script>
        <script src="https://code.highcharts.com/modules/exporting.js"></script>
        <script src="https://code.highcharts.com/modules/export-data.js"></script>
        <script src="https://code.highcharts.com/modules/accessibility.js"></script>

        <style>
            .highcharts-figure,
            .highcharts-data-table table {
                min-width: 360px;
                max-width: 800px;
                margin: 1em auto;
            }

            .highcharts-data-table table {
                font-family: Verdana, sans-serif;
                border-collapse: collapse;
                border: 1px solid #ebebeb;
                margin: 10px auto;
                text-align: center;
                width: 100%;
                max-width: 500px;
            }

            .highcharts-data-table caption {
                padding: 1em 0;
                font-size: 1.2em;
                color: #555;
            }

            .highcharts-data-table th {
                font-weight: 600;
                padding: 0.5em;
            }

            .highcharts-data-table td,
            .highcharts-data-table th,
            .highcharts-data-table caption {
                padding: 0.5em;
            }

            .highcharts-data-table thead tr,
            .highcharts-data-table tr:nth-child(even) {
                background: #f8f8f8;
            }

            .highcharts-data-table tr:hover {
                background: #f1f7ff;
            }
        </style>
    </head>
    <body>
        <form runat="server">

            <figure class="highcharts-figure">
                <div id="highcharts1"></div>

            </figure>

            <script type="text/javascript">
                Highcharts.chart('highcharts1', {
                    chart: {
                        type: 'bar'
                    },
                    title: {
                        text: 'Number of MSMEs By District',
                        align: 'left'
                    },              
                    xAxis: {                    
                        categories: <%=JsonDistrict%>,
                        title: {
                            text: null
                        },
                        gridLineWidth: 1,
                        lineWidth: 0
                    },
                    yAxis: {
                        min: 0,
                        title: {
                            text: 'Population (millions)',
                            align: 'high'
                        },
                        labels: {
                            overflow: 'justify'
                        },
                        gridLineWidth: 0
                    },
                    tooltip: {
                        valueSuffix: ' millions'
                    },
                    plotOptions: {
                        bar: {
                            borderRadius: '50%',
                            dataLabels: {
                                enabled: true
                            },
                            groupPadding: 0.1
                        }
                    },
                    legend: {
                        layout: 'vertical',
                        align: 'right',
                        verticalAlign: 'top',
                        x: -40,
                        y: 80,
                        floating: true,
                        borderWidth: 1,
                        backgroundColor:
                            Highcharts.defaultOptions.legend.backgroundColor || '#FFFFFF',
                        shadow: true
                    },
                    credits: {
                        enabled: false
                    },
                    series: [{
                        name: 'Year 1990',
                        data: [631, 727, 3202, 721]
                    }, {
                        name: 'Year 2000',
                        data: [814, 841, 3714, 726]
                    }, {
                        name: 'Year 2018',
                        data: [1276, 1007, 4561, 746]
                    }]
                });

            </script>


        </form>
    </body>
    </html>

这是它背后的代码:

    using Newtonsoft.Json;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;

    namespace WebFormHighChart
    {
        public partial class _Default : Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {

            }

            protected string BindDataToChart()
            {
                string jsonDistrict = "['Africa', 'America', 'Asia', 'Europe']";
                return jsonDistrict;
            }

            public string JsonDistrict { get => BindDataToChart(); }
        }
    }

如您所见,我使用名为“JsonDistrict”的属性来填充 javascript 图表配置。您还可以定义一个 JS 变量,并以类似的方式将内容放入其中,然后根据需要使用它。

© www.soinside.com 2019 - 2024. All rights reserved.