创建2个图表可在一幅图中显示2种不同的数据(asp.net MVC) [英] Creating 2 charts show 2 different data in one graph (asp.net MVC)

查看:44
本文介绍了创建2个图表可在一幅图中显示2种不同的数据(asp.net MVC)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好,我知道这听起来可能令人困惑,但是我希望我能得到帮助....

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

好吧,我正在使用MYSQL处理asp.net mvc数据库,我要制作的是2张图表,在一张图中显示2个不同的数据,例如因此,在我的控制器中,我尝试同时返回两者,但只显示一个图表...

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 ...

控制器:

    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());
        }
    }
}

视图:

@{
    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>

在添加新命令和显示sec图表的所有内容之前,该图表可以正常工作.希望我能获得帮助

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

推荐答案

您可以这样做:

将2个图表的数据放在不同的ViewBag元素中:

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();
}

在您的视图中:

@{
    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个图表可在一幅图中显示2种不同的数据(asp.net MVC)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆