Creating 2 charts show 2 different data in one graph (asp.net MVC)

风流意气都作罢 提交于 2019-12-25 12:26:35

问题


Hello I know it might sound confusing but I hope I can get help ....

Well I'm working on asp.net mvc using MYSQL for database , and what I'm trying to make is a 2 charts show 2 different data in one graph something like this so in my controller I tried to return both but it shows one chart only ...

The controller :

    public class BartestController : Controller
    {
        public static List<string> getChartData()
        {
            var returnData = new List<string>();
            var Con = new MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["MYdb"].ConnectionString);

            //BarChart1
            var MySql = new MySqlCommand("select sum(c.eff) as efficinciey , d.className from usecases c , classes d where d.ClassID = c.ClassID And  c.stID=3  group by ClassName;", Con);
            var dataAdapter = new MySqlDataAdapter(MySql);
            var dataset = new DataSet();
            dataAdapter.Fill(dataset);

            var chartLabel = new StringBuilder();
            var chartData = new StringBuilder();
            chartLabel.Append("[");
            chartData.Append("[");

            foreach (DataRow row in dataset.Tables[0].Rows)
            {
                chartLabel.Append(string.Format("'{0}',", row["ClassName"].ToString()));
                chartData.Append(string.Format("{0},", row["eff"].ToString()));
            }


            chartData.Length++;
            chartData.Append("]");
            chartLabel.Length++;
            chartLabel.Append("]");
            chartData = chartData.Remove(chartData.Length - 3, 2);
            chartLabel = chartLabel.Replace("'", "g");
            chartLabel = chartLabel.Remove(chartLabel.Length - 3, 2);
            returnData.Add(chartLabel.ToString());
            returnData.Add(chartData.ToString());
            System.Diagnostics.Debug.WriteLine("returnData: " + chartLabel);
            return returnData;
        }

        public static List<string> getChartData2()
        {
            var returnData1 = new List<string>();
            var Con = new MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["MYdb"].ConnectionString);

            //BarChart1
            var MySql1 = new MySqlCommand(" select count(c.UseCaseID) , d.ClassName from usecases c , classes d where d.ClassID= c.ClassID group by d.ClassName;", Con);
            var dataAdapter1 = new MySqlDataAdapter(MySql1);
            var dataset1 = new DataSet();
            dataAdapter1.Fill(dataset1);

            var chartLabel1 = new StringBuilder();
            var chartData1 = new StringBuilder();
            chartLabel1.Append("[");
            chartData1.Append("[");

            foreach (DataRow row in dataset1.Tables[0].Rows)
            {
                chartLabel1.Append(string.Format("'{0}',", row["ClassName"].ToString()));
                chartData1.Append(string.Format("{0},", row["count(c.UseCaseID)"].ToString()));
            }

            chartData1.Length++;
            chartData1.Append("]");
            chartLabel1.Length++;
            chartLabel1.Append("]");
            chartData1 = chartData1.Remove(chartData1.Length - 3, 2);
            chartLabel1 = chartLabel1.Replace("'", "g");
            chartLabel1 = chartLabel1.Remove(chartLabel1.Length - 3, 2);
            returnData1.Add(chartLabel1.ToString());
            returnData1.Add(chartData1.ToString());
            System.Diagnostics.Debug.WriteLine("returnData: " + chartLabel1);
            return returnData1;    
        }

        public ActionResult BartestChart()
        {
            List<string> returnData = getChartData();
            ViewData["Chart"] = returnData;
            List<string> returnData1 = getChartData2();
            ViewData["Chart"] = returnData1;
            return View(getChartData());
            return View(getChartData2());
        }
    }
}

The view :

@{
    ViewBag.Title = "BartestChart";
    Layout = "~/Views/Shared/_MainLayout.cshtml";
    int x = 0;
}

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">


<body style="height: 331px">
    <div style="padding-top:50px"></div>
    <div>
        <canvas id="Chart" width="500" height="500" style="border:dashed;border-color:lightgray"></canvas>
    </div>
    <script src="../Scripts/jquery-1.10.2.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="../Scripts/Chart.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.0.2/Chart.js"></script>
    <script>
        var chartLabel;
        var chartData = [];
    </script>

    @foreach (var label in (List<string>)ViewBag.Chart)
    {
        if (x == 1)
        {
            <script>
                        chartData = @label;
                        console.log(chartData);
            </script>
        }
        else
        {
            <script>
                        chartLabel = "@label";
                        chartLabel = chartLabel.replace(/g/g, "\"");
                        chartLabel = JSON.parse(chartLabel);
                        console.log(chartLabel);
            </script>
        }
        x++;

    }
    <script>
        var chartLabel1;
        var chartData1 = [];
    </script>

    @foreach (var label in (List<string>)ViewBag.Chart)
    {
        if (x == 1)
        {
            <script>
                        chartData1 = @label;
                        console.log(chartData1);
            </script>
        }
        else
        {
            <script>
                        chartLabel1 = "@label";
                        chartLabel1 = chartLabel1.replace(/g/g, "\"");
                        chartLabel1 = JSON.parse(chartLabel1);
                        console.log(chartLabel1);
            </script>
        }
        x++;

    }
    <script type="text/javascript">
                        var ctx = document.getElementById("Chart").getContext('2d');

                        var barData = {
                            labels: chartLabel,
                            datasets: [
                                        {
                                            label: 'Efficiency',
                                            fillColor: "cadetblue",
                                            strokeColor: "cadetblue",
                                            data: chartData

                                        } ],
                            labels: chartLabel1,
                            datasets: [
                                        {
                                            label: 'Efficiency',
                                            fillColor: "green",
                                            strokeColor: "green",
                                            data: chartData1

                                        } ]


                        };

                        var skillsChart = new Chart(ctx).Bar(barData);    

    </script>

</body>
</html>

The chart works fine before I added new command and everything to show the sec chart.... I hope I can get help


回答1:


You can do it like this:

Place the data for the 2 charts in different ViewBag elements:

public ActionResult BartestChart()
{
   List<string> returnData = getChartData();
   ViewBag.ChartOne = returnData;
   List<string> returnData1 = getChartData2();
   ViewBag.ChartTwo = returnData1;
   return View();
}

And in your View:

@{
    ViewBag.Title = "BartestChart";
    Layout = "~/Views/Shared/_MainLayout.cshtml";
    int x = 0;
}

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">

<body style="height: 331px">
    <div style="padding-top:50px"></div>
    <div>
        <canvas id="Chart" width="500" height="500" style="border:dashed;border-color:lightgray"></canvas>
    </div>
    <script src="../Scripts/jquery-1.10.2.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="../Scripts/Chart.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.0.2/Chart.js"></script>
    <script>
        var chartLabel;
        var chartData = [];
    </script>

    @foreach (var label in (List<string>)ViewBag.ChartOne)
    {
        if (x == 1)
        {
            <script>
                        chartData = @label;
                        console.log(chartData);
            </script>
        }
        else
        {
            <script>
                        chartLabel = "@label";
                        chartLabel = chartLabel.replace(/g/g, "\"");
                        chartLabel = JSON.parse(chartLabel);
                        console.log(chartLabel);
            </script>
        }
        x++;

    }
    <script>
        var chartLabel1;
        var chartData1 = [];
    </script>


@foreach (var label in (List<string>)ViewBag.ChartTwo)
{
    <script>
                    chartData1 = @label;
                    console.log(chartData1);
    </script>

}
<script type="text/javascript">
                    var ctx = document.getElementById("Chart").getContext('2d');

                var barData = {
                    labels: chartLabel,
                    datasets: [
                                {
                                    label: 'Efficiency',
                                    fillColor: "IndianRed",
                                    strokeColor: "IndianRed",
                                    data: chartData1

                                } ,

                                {
                                    label: 'Efficiency',
                                    fillColor: "Black",
                                    strokeColor: "Black",
                                    data: chartData

                                } ]
    };

                var skillsChart = new Chart(ctx).Bar(barData);

</script>

</body>
</html>



回答2:


You can use Third-Party charts Like Google charts or AM Charts Link For AM Charts Website




回答3:


The view :

@{
    ViewBag.Title = "BartestChart";
    Layout = "~/Views/Shared/_MainLayout.cshtml";
    int x = 0;
}

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">

<body style="height: 331px">
    <div style="padding-top:50px"></div>
    <div>
        <canvas id="Chart" width="500" height="500" style="border:dashed;border-color:lightgray"></canvas>
    </div>
    <script src="../Scripts/jquery-1.10.2.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="../Scripts/Chart.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.0.2/Chart.js"></script>
    <script>
        var chartLabel;
        var chartData = [];
    </script>

    @foreach (var label in (List<string>)ViewBag.ChartOne)
    {
        if (x == 1)
        {
            <script>
                        chartData = @label;
                        console.log(chartData);
            </script>
        }
        else
        {
            <script>
                        chartLabel = "@label";
                        chartLabel = chartLabel.replace(/g/g, "\"");
                        chartLabel = JSON.parse(chartLabel);
                        console.log(chartLabel);
            </script>
        }
        x++;

    }
    <script>
        var chartLabel1;
        var chartData1 = [];
    </script>

    @foreach (var label in (List<string>)ViewBag.ChartTwo)
    {
        if (x == 1)
        {
            <script>
                        chartData1 = @label;
                        console.log(chartData1);
            </script>
        }
        else
        {
            <script>
                        chartLabel1 = "@label";
                        chartLabel1 = chartLabel1.replace(/g/g, "\"");
                        chartLabel1 = JSON.parse(chartLabel1);
                        console.log(chartLabel1);
            </script>
        }
        x++;

    }
    <script type="text/javascript">
                        var ctx = document.getElementById("Chart").getContext('2d');

                    var barData = {
                        labels: chartLabel,
                        datasets: [
                                    {
                                        label: 'Efficiency',
                                        fillColor: "cadetblue",
                                        strokeColor: "cadetblue",
                                        data: chartData

                                    } ,

                                    {
                                        label: 'Efficiency',
                                        fillColor: "green",
                                        strokeColor: "green",
                                        data: chartData1

                                    } ]
        };

                    var skillsChart = new Chart(ctx).Bar(barData);

    </script>

</body>
</html>

The change in the Controller:

 public ActionResult BartestChart()
        {
            List<string> returnData = getChartData();
            ViewBag.ChartOne = returnData;
            List<string> returnData1 = getChartData2();
            ViewBag.ChartTwo = returnData1;
            return View();
        }


来源:https://stackoverflow.com/questions/47048052/creating-2-charts-show-2-different-data-in-one-graph-asp-net-mvc

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!