【问题标题】:Display message(there is no data available) or empty graph for google pie chart if data is zero using asp.net web form如果使用 asp.net 网络表单的数据为零,则显示消息(没有可用数据)或谷歌饼图的空图
【发布时间】:2020-01-16 11:22:26
【问题描述】:

如果使用 asp.net 网络表单的数据为零,则显示消息(没有可用数据)或谷歌饼图的空图

下面是我的脚本

<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
    google.charts.load('current', { packages: ['corechart'] });
</script>

<script type="text/javascript">

    $(document).ready(function () {

        // Load the Visualization API and the corechart package.
        google.charts.load('current', { 'packages': ['corechart'] });
        // Set a callback to run when the Google Visualization API is loaded.
        google.charts.setOnLoadCallback(drawChart);
        // Callback that creates and populates a data table,
        // instantiates the pie chart, passes in the data and
        // draws it.
        function drawChart() {
            // Create the data table.
            $.ajax({
                type: "POST",
                url: "add_claim.aspx/Fillgraph",
                data: '{}',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (r) {


                    if (r.d === null) {
                        document.getElementById('piechart').innerHTML = 'No data found.';
                        return;
                    }

                    var chartdata = new google.visualization.DataTable();
                    chartdata.addColumn('string', 'Topping');
                    chartdata.addColumn('number', 'Slices');

                    chartdata.addRows(r.d);


                    // Set chart options
                    var options = {
                        pieHole: 0.6,
                        legend: { position: 'bottom' },
                        width: '100%',
                        height: '100%',
                        pieSliceText: 'percentage',
                        colors: ['#1e93c6', '#d6563c', '#c79f49', '#ff9a00'],

                        chartArea: {
                            left: "3%",
                            top: "5%%",
                            height: "95%",
                            width: "94%"
                        }
                    };


                    var chart = new google.visualization.PieChart(document.getElementById('piechart'));
                    chart.draw(chartdata, options);


                },


                failure: function (r) {
                   // alert(r.d);
                },
                error: function (r) {
                  //  alert(r.d);
                }
            });
        }

    })
</script>

下面是我的c#代码

[WebMethod]
public static List<object> Fillgraph()
{
    BusinessLogic bl = new BusinessLogic();
    BusinessObject bo = new BusinessObject();
    List<object> chartData = new List<object>();

    bo.Para1 = "1";//@ParaValues

    bo.Para2 = System.Web.HttpContext.Current.Session["UserId"].ToString();//@username
    bo.Para3 = System.Web.HttpContext.Current.Session["UniqueID"].ToString();//@username

    DataTable dt = bl.ACS_Get_Graphs(bo);

    if (dt.Rows.Count > 0)
    {
        if (dt.Rows[0]["Food"].ToString() != "")
        {
            chartData.Add(new object[] { "Food", Convert.ToInt32(dt.Rows[0]["Food"].ToString()) });
        }
        else
        {
            chartData.Add(new object[] { "Food", 0 });
        }
        if (dt.Rows[0]["LocalConveyance"].ToString() != "")
        {
            chartData.Add(new object[] { "Local conveyance", Convert.ToInt32(dt.Rows[0]["LocalConveyance"].ToString()) });
        }
        else
        {
            chartData.Add(new object[] { "Local conveyance", 0 });
        }
        if (dt.Rows[0]["Lodging"].ToString() != "")
        {
            chartData.Add(new object[] { "Lodging", Convert.ToInt32(dt.Rows[0]["Lodging"].ToString()) });
        }
        else
        {
            chartData.Add(new object[] { "Lodging", 0 });
        }
        if (dt.Rows[0]["MisExpences"].ToString() != "")
        {
            chartData.Add(new object[] { "Misc. Expences", Convert.ToInt32(dt.Rows[0]["MisExpences"].ToString()) });
        }
        else
        {
            chartData.Add(new object[] { "Misc. Expences", 0 });
        }

        if (dt.Rows[0]["Travelling"].ToString() != "")
        {
            chartData.Add(new object[] { "Travelling", Convert.ToInt32(dt.Rows[0]["Travelling"].ToString()) });
        }
        else
        {
            chartData.Add(new object[] { "Travelling", 0 });
        }

     return chartData;
    }
    else
    {
          return null;
    }


}

如果本地运输=0,住宿=0,杂项。 Expences=0 和 Travelling=0 则消息应显示没有可用数据 或显示空饼图

我尝试了下面的示例,但无法获得

How to display "No Data" message in the middle of chart area in column chart

Google Charts - No data available - Able to display a blank chart?

JavaScript 调试器图片

【问题讨论】:

    标签: c# asp.net webforms


    【解决方案1】:

    如果没有数据,您可以从 WebMethod 返回null

    if (dt.Rows.Count > 0)
    {
        //rest of code
    }
    else
    {
        return null;
    }
    

    然后在success: function (r)顶部的drawChart函数中检查null

    function drawChart() {
        $.ajax({
            type: "POST",
            url: "add_claim.aspx/Fillgraph",
            data: '{}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (r) {
    
                if (r.d === null) {
                    document.getElementById('piechart').innerHTML = 'No data found.';
                    return;
                }
    
                var chartdata = new google.visualization.DataTable();
                chartdata.addColumn('string', 'Topping');
                chartdata.addColumn('number', 'Slices');       
    
                //rest of javascript code
    

    【讨论】:

    • 可以分享你分享完整的代码,因为不管你给出什么都不能工作,我已经调试并发现了 javascript,if (r.d === null) { // r = {d: Array(5)此值来自调试浏览 null 未显示 document.getElementById('piechart').innerHTML = 'No data found.';返回; }。 @VVDWWD
    • 其余的代码和你的完全一样。我刚刚用return null 替换了else 部分中的5 行chartData.Add(new object[] { "xxx", 0 });,并在success: function (r) 的顶部添加了这4 行javascript。 return 将确保不执行图表代码。
    • 我更新了你给出的问题块,请再次检查问题,我没有收到任何消息。 @VDWWD
    • 我已经更新了我的答案。您需要将代码放在第一个success 中。您似乎有多个...
    • 对不起,我错误地添加了赏金,请如何在您的下方添加,我无法恢复。 @VDWWD
    【解决方案2】:

    您放置的答案对应于 LineChart,在您的示例中,您使用的是 PieChart,请尝试替换:

    JS 代码:

    // Instantiate and draw our chart, passing in some options.
    var chart = new google.visualization.PieChart(document.getElementById('piechart'));
    chart.draw(chartdata, options);
    

    为此:

    JS 代码:

    if (chartdata.getNumberOfRows() == 0) {
    
        var d = document.getElementById("piechart");
    
        d.innerHTML = "<p>Sorry, not info available</p>";
    
        // Custom style
        d.style.position = "relative";
        d.style.fontSize = "25px";
    
        d.style.right = "50%";
        d.style.left = "50%";
    
    }
    else {
    
        // Instantiate and draw our chart, passing in some options.
        var chart = new google.visualization.PieChart(document.getElementById('piechart'));
        chart.draw(chartdata, options);
    
    }
    

    参考资料: how to change the text 'no data' in google pie chart

    【讨论】:

    • 我再次尝试了您的代码,显示空图没有消息显示。 @朱利安
    • 我已经更新了我的答案,而不是append 使用innerHTML,你使用jQuery 吗?如果它不起作用,您可以发布您的 html 代码吗?
    • 我添加了这个也仍然是空的。 @朱利安
    • 浏览器控制台有错误吗? div“饼图”是一个简单的 div?
    • 它进入 else 条件,错误未显示在浏览调试器中。我认为 chartdata.getNumberOfRows() == 0 无法正常工作,因为您在这里给出了不同的参考 url 我使用了 var chartdata = new google.visualization.DataTable();但是参考 url 声明是 var data = google.visualization.arrayToDataTable([ ['Task', 'Hours per Day'] ]);。 @朱利安
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    相关资源
    最近更新 更多