Chart - potatoscript/asp.net.core.mvc GitHub Wiki

Home

Chart with Chart.JS

home

ChartJS

        public IActionResult Index()
        {
            var model = new List<DataModel>();

            Constant d = new Constant();
            string sql = "SELECT DISTINCT " + d.pic + ", COUNT(" + d.name + "), ";
            sql += " COUNT( CASE WHEN status != 'Done' THEN 1 END),";
            sql += " COUNT( CASE WHEN status = 'Done' THEN 1 END)";
            sql += " FROM " + d.table;
            sql += " GROUP BY " + d.pic + " ";
            sql += " ORDER BY COUNT(" + d.name + ") DESC ";
            Database db = new Database(sql, _server);
            if (db.data.HasRows)
            {
                while (db.data.Read())
                {
                    model.Add(new DataModel
                    {
                        pic = db.data[0].ToString().Trim(),
                        status = db.data[2].ToString().Trim(),
                        status_done = db.data[3].ToString().Trim()
                    });
                }
            }
            db.Close();
            return View(model);
        }
@model List<DataModel>
@{
    var XLabels = Newtonsoft.Json.JsonConvert.SerializeObject(Model.Select(x => x.pic).ToList());
    var YLabels = Newtonsoft.Json.JsonConvert.SerializeObject(Model.Select(x => x.status).ToList());
    var YLabels_Done = Newtonsoft.Json.JsonConvert.SerializeObject(Model.Select(x => x.status_done).ToList());
    ViewData["Title"] = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h1>Dashboard</h1>


<div class="chart-container">
    <canvas id="tmsBarChart" style="width:100%;height:500px">Loading...</canvas>
</div>


<script type="text/javascript">
    jQuery(document).ready(function () {
        // to enable the chartArea setting
        Chart.pluginService.register({
            beforeDraw: function (chart, easing) {
                if (chart.config.options.chartArea && chart.config.options.chartArea.backgroundColor) {
                    var helpers = Chart.helpers;
                    var ctx = chart.chart.ctx;
                    var chartArea = chart.chartArea;
                    ctx.save();
                    ctx.fillStyle = chart.config.options.chartArea.backgroundColor;
                    ctx.fillRect(chartArea.left, chartArea.top, chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);
                    ctx.restore();
                }
            }
        });


    var ctx = document.getElementById('tmsBarChart').getContext('2d');
            var barChartData = {
                labels: @Html.Raw(XLabels),
                datasets: [
                    {
                        label: 'Completed',
                        yAxisID: 'y-axis-1',
                        type: 'bar',
                        backgroundColor:"grey",
                        borderColor: "black",
                        borderWidth: 1,
                        fill: true,
                        data: @Html.Raw(YLabels_Done),
                    },
                    {
                        label: 'In progress',
                        yAxisID: 'y-axis-1',
                        type: 'bar',
                        backgroundColor:"lightgreen",
                        borderColor: "black",
                        borderWidth: 1,
                        fill: true,
                        data: @Html.Raw(YLabels),
                    },

                ]

            };

            var myBar = new Chart(ctx, {
                type: 'bar',
                data: barChartData,

                options: {
                    legend: {
                        display: true,
                        position: 'bottom',
                        labels: {
                            
                            fontColor: '#333',
                            boxWidth: 9,
                            fontColor: 'black',
                            fontFamily: '6px Montserrat',
                            usePointStyle: true,

                        }
                    },
                    hover: {
                        onHover: function (e) {
                            var point = this.getElementAtEvent(e);
                            if (point.length) e.target.style.cursor = "pointer";
                            else e.target.style.cursor = "default";
                        }
                    },
                    onClick: function (evt, item) {
                        alert(item.);

                    },
                    skipNull: true,
                    title: {
                        display: true,
                        fontSize: 18,
                        text: 'Number of Task '
                    },
                    tooltips: {
                        mode: 'index',
                        intersect: false,
                        /*
                        callbacks: {
                            label: function (tooltipItem) {
                                return tooltipItem.yLabel;
                            }
                        }
                        */
                    },
                    //responsive: true,
                    scales: {
                        offset: true,
                        x: {
                            gridLines: {
                                offsetGridLines: true
                            }
                        },
                        xAxes: [{
                            stacked: true,
                            ticks: {
                                autoSkip: true,
                                fontSize: 15,
                                maxRotation: 45,
                                minRotation:45
                            },

                        }],
                        yAxes: [
                            {
                                stacked: true,
                                display: true,
                                position: 'left',
                                id: 'y-axis-1',
                                ticks: {
                                    beginAtZero: false,
                                    min: 0,
                                    stepSize: 5,
                                    fontSize: 15,
                                    autoSkip: true,
                                    callback: function (value, index, values) {
                                        return value ;
                                    }
                                }
                            },
                            {
                                //stacked: false,
                                display: true,
                                position: 'right',
                                id: 'y-axis-2',
                                scaleLabel: {
                                    display: true,
                                    labelString: 'unit'
                                },
                                ticks: {
                                    beginAtZero: false,
                                    fontSize: 15,
                                    min: -50,
                                    max: 50,
                                    stepSize: 10,
                                    autoSkip: true,
                                    /* Include a dollar sign in the ticks
                                    callback: function (value, index, values) {
                                        return '$' + value;
                                    }
                                    */

                                }
                            }
                        ],
                    },
                    ///to set the css of the font of the label

                    plugins: { ////by adding the plugin chartjs-plugin-labels.js
                        labels: {
                            render: function (args) {
                                // skip the zero label
                                var val = parseFloat(args.value);
                                if (val < 1) return "";

                                return parseFloat(args.value).toFixed(0);
                            },
                            arc: true,
                            fontSize: 15,
                            fontColor: 'black',
                            position: 'outside',

                        },

                    },

                    responsive: false,
                    chartArea: {
                        backgroundColor: 'White'
                    }
                },



            });

    })
</script>
⚠️ **GitHub.com Fallback** ⚠️