冯 海

一个程序新人菜鸟的日记,希望大家多多关照。QQ:32316131

mvc5 +ef +adminlte 用百度echar实现图表教程3 -代码的实现部份

在上一节已实现了数据表的制作,还有显示栏目等功能。现在开始使用。

一、后台。index()方法
// GET: Echarones
		//public async Task<ActionResult> Index(string SeachColumnString)
		public ActionResult Index(string SeachColumnString)
		{   ///读出所有的栏目,便于在前台读出来写在li中。要是没有栏目肯定报错在前台
			ViewBag.drolistmenu = db.EcharColumns;
			///初始化分页

			///分析是否有栏目选择。没有提示返回空的
			//if (string.IsNullOrEmpty(SeachColumnString))
			//{
			//	SeachColumnString = "1";

			//}

			//var listdouble = from w in db.Echarones.Where(m => m.EcharColmnId == SeachColumnString)
			//				 select w;

			//return Json(listdouble, JsonRequestBehavior.AllowGet);


			return View();


			/// 


		}

  这个我基本全注掉了,这里的功能就是读出栏目列表,赋值给ViewBag

2.数据读取(重点)
[HttpPost]
		public ActionResult GetData(string SeachColumnString)
		{
			///读出第一列数据,我们作为任务数,同时新List一个double列表。赋值为读出的集合
			var xxx =( from a in db.Echarones.Where( m  => m.EcharColmnId== SeachColumnString) select a.TaskDondeOne).ToList();
			List<double> listdouble = new List<double>();
			listdouble = xxx;

			///读出第二列数据,我们作为完成数,同时新List一个double列表。赋值为读出的集合
			var xxx3 = (from a in db.Echarones.Where(m => m.EcharColmnId == SeachColumnString) select a.TaskDondeTwo).ToList();
			List<double> listdouble2 = new List<double>();
			listdouble2 = xxx3;

			///读出第三列数据,我们作为X轴数据,是string,同时新List一个是string列表。赋值为读出的集合
			var xxx2 = (from a in db.Echarones.Where(m => m.EcharColmnId == SeachColumnString) select a.ObjNmae).ToList();
			List<string> listname = new List<string>();
			listname = xxx2;
			 
			///新 opt  ,opt就是模型,他针对Echars中的Option中的来建的,这样可以直接SetOption,不用再前台组合Json,属性要对着前台来看
			opt p = new opt();
			p.text = "这是后台数据";
			p.xAxis = new List<xAxis> {
				new xAxis{
				data=xxx2 }

			};
			p.series = new List<series> {
				new series{
					 name="任务",
					  //data=new List<int>{ 12, 23, 32, 34, 43, 45 }
					  data=listdouble
				}
			};
			p.series.Add(
				  new series
				  {
					  name = "完成数",
					  data = listdouble2
				  }); 
				
			///返回Json
			return Json(p, JsonRequestBehavior.AllowGet);
		}
	  

	}
	///index下的图表
	public class opt
	{
		//Text 为表的名称
		public string text { get; set; }
		//定义X轴
		public List<xAxis> xAxis { get; set; }
		//完成数和任务数的类集合
		public List<series> series { get; set; }

	}

	public class series
	{
		//下面两个属性和前台的Echars相对应,名称别错了
		public string name { get; set; }
		public List<double> data { get; set; }



	}

	public class xAxis
	{
		 
		public List<string> data{ get; set; }
	}

  

3.前台。前台注意,数据初始为空,必须点一下左边的栏目,才能SETOPTION
@model IEnumerable<jsdhh2.Models.Echarone>

@{
	ViewBag.Title = "Index";
}



<div class="dhhheight1 col-md-12 col-xs-12"></div>
<!--start 左 -->
<div class="col-md-3">

	.
	<div class="box box-solid">
		<div class="box-header with-border">
			<h3 class="box-title">图标栏目</h3>

			<div class="box-tools">
				<button type="button" class="btn btn-box-tool" data-widget="collapse">
					<i class="fa fa-minus"></i>
				</button>
			</div>
		</div>
		<div class="box-body no-padding" style="display: block;">
			<ul class="nav nav-pills nav-stacked">

				@foreach (jsdhh2.Models.EcharColumn data1 in (ViewBag.drolistmenu as IEnumerable<jsdhh2.Models.EcharColumn>
))
				{

					<li> <a href="#" onclick="GETDATAE(@data1.Id)"  ><i class="fa fa-circle-o"></i> @data1.EcharColumnName</a></li>
				}

			</ul>
		</div>
		<!-- /.box-body -->

	</div>









</div>
<!--start 右 -->
<div class="col-md-9 col-xs-12 pull-right">

	<!-- Content Header (Page header) -->
	<section class="content-header">
		<h1>
			图表中心
			<small>我爱图标,分析快捷~</small>

		</h1>

		<ol class="breadcrumb">
			<li><a href="#"><i class="fa fa-dashboard"></i> Level</a></li>
			<li class="active">Here</li>
		</ol>
	</section>
	<!--end Content Header (Page header) -->
	<!-- Main content -->
	<section class="content">

		 
		<div id="main" style="width: 100%;height:450px;"></div>




			



	</section>

</div>


@section Scripts {
 
<script src="~/Scripts/echarts-all-3.js"></script>
	<script type="text/javascript">
		// 基于准备好的dom,初始化echarts实例
		var dom = document.getElementById("main");
		var myChart = echarts.init(dom);
		var app = {};
		option = null;
		app.title = '堆叠柱状图';
		// 指定图表的配置项和数据
		var option = {
			title: {
				text: 'ECharts 入门示例'
			},
			tooltip: {},
			legend: {
				data: ['任务', '完成数']
			},
			toolbox: {
				show: true,
				feature: {
					mark: { show: true },
					dataView: { show: true, readOnly: false },
					magicType: { show: true, type: ['line', 'bar'] },
				 
					restore: { show: true },
					saveAsImage: { show: true }
				}
			},
			calculable: true,
			xAxis: {
				data: ["1", "2", "3", "4", "5", "6", "7", "8"]
			},
			yAxis: {},
			series: [{
				label: {
					normal: {
						show: true,
						position: 'insideTop'
					}
				},
				name: '任务',
				type: 'bar',
				data: [0, 0, 0, 0, 0, 0]
			},
				{
					label: {
						normal: {
							show: true,
							position: 'insideTop'
						}
					},
					name: '完成数',
					type: 'bar',
					data: [0, 0, 0, 0, 0, 0]
				}
			]



		};

		// 使用刚指定的配置项和数据显示图表。
		myChart.setOption(option);
		function GETDATAE(str) {

			$.post('/Echarones/GetData?SeachColumnString=' + str).then(function (res) {
				console.info(res);
				myChart.setOption(res);

			});
		};



		//$('#btn').click(function () {
		//	$.post('/Echarones/GetData').then(function (res) {
		//		console.info(res);
		//		myChart.setOption(res);
		//	})
		//});
</script>











}
  5,效果

 

6.说明。

在前台中,左边的栏目中使用onclick传参数

<li> <a href="#" onclick="GETDATAE(@data1.Id)"  ><i class="fa fa-circle-o"></i> @data1.EcharColumnName</a></li>

  

然后JS中使用这个方法SetOption

	// 使用刚指定的配置项和数据显示图表。
		myChart.setOption(option);
		function GETDATAE(str) {

			$.post('/Echarones/GetData?SeachColumnString=' + str).then(function (res) {
				console.info(res);
				myChart.setOption(res);

			});
		};

  

 7.最后

附上这个过多整的控制器。

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Threading.Tasks;
using System.Net;
using System.Web;
using System.Web.Mvc;
using jsdhh2.DAL;
using jsdhh2.Models;

namespace jsdhh2.Controllers
{
    public class EcharonesController : Controller
    {
        private OaDALContent db = new OaDALContent();

		// GET: Echarones
		//public async Task<ActionResult> Index(string SeachColumnString)
		public ActionResult Index(string SeachColumnString)
		{   ///读出所有的栏目,便于在前台读出来写在li中。要是没有栏目肯定报错在前台
			ViewBag.drolistmenu = db.EcharColumns;
			///初始化分页

			///分析是否有栏目选择。没有提示返回空的
			//if (string.IsNullOrEmpty(SeachColumnString))
			//{
			//	SeachColumnString = "1";

			//}

			//var listdouble = from w in db.Echarones.Where(m => m.EcharColmnId == SeachColumnString)
			//				 select w;

			//return Json(listdouble, JsonRequestBehavior.AllowGet);


			return View();


			/// 


		}

        // GET: Echarones/Details/5
        public async Task<ActionResult> Details(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Echarone echarone = await db.Echarones.FindAsync(id);
            if (echarone == null)
            {
                return HttpNotFound();
            }
            return View(echarone);
        }

        // GET: Echarones/Create
        public ActionResult Create()
        {
            return View();
        }

        // POST: Echarones/Create
        // 为了防止“过多发布”攻击,请启用要绑定到的特定属性,有关 
        // 详细信息,请参阅 https://go.microsoft.com/fwlink/?LinkId=317598。
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Create([Bind(Include = "Id,EcharColmnId,ObjNmae,TaskOne,TaskDondeOne,TaskTwo,TaskDondeTwo,TaskThree,TaskDondeThree,TaskFour,TaskDondeFour,TaskFive,TaskDondeFive")] Echarone echarone)
        {
            if (ModelState.IsValid)
            {
                db.Echarones.Add(echarone);
                await db.SaveChangesAsync();
                return RedirectToAction("Index");
            }

            return View(echarone);
        }

        // GET: Echarones/Edit/5
        public async Task<ActionResult> Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Echarone echarone = await db.Echarones.FindAsync(id);
            if (echarone == null)
            {
                return HttpNotFound();
            }
            return View(echarone);
        }

        // POST: Echarones/Edit/5
        // 为了防止“过多发布”攻击,请启用要绑定到的特定属性,有关 
        // 详细信息,请参阅 https://go.microsoft.com/fwlink/?LinkId=317598。
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Edit([Bind(Include = "Id,EcharColmnId,ObjNmae,TaskOne,TaskDondeOne,TaskTwo,TaskDondeTwo,TaskThree,TaskDondeThree,TaskFour,TaskDondeFour,TaskFive,TaskDondeFive")] Echarone echarone)
        {
            if (ModelState.IsValid)
            {
                db.Entry(echarone).State = EntityState.Modified;
                await db.SaveChangesAsync();
                return RedirectToAction("Index");
            }
            return View(echarone);
        }

        // GET: Echarones/Delete/5
        public async Task<ActionResult> Delete(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Echarone echarone = await db.Echarones.FindAsync(id);
            if (echarone == null)
            {
                return HttpNotFound();
            }
            return View(echarone);
        }

        // POST: Echarones/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> DeleteConfirmed(int id)
        {
            Echarone echarone = await db.Echarones.FindAsync(id);
            db.Echarones.Remove(echarone);
            await db.SaveChangesAsync();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }


		[HttpPost]
		public ActionResult GetData(string SeachColumnString)
		{
			///读出第一列数据,我们作为任务数,同时新List一个double列表。赋值为读出的集合
			var xxx =( from a in db.Echarones.Where( m  => m.EcharColmnId== SeachColumnString) select a.TaskDondeOne).ToList();
			List<double> listdouble = new List<double>();
			listdouble = xxx;

			///读出第二列数据,我们作为完成数,同时新List一个double列表。赋值为读出的集合
			var xxx3 = (from a in db.Echarones.Where(m => m.EcharColmnId == SeachColumnString) select a.TaskDondeTwo).ToList();
			List<double> listdouble2 = new List<double>();
			listdouble2 = xxx3;

			///读出第三列数据,我们作为X轴数据,是string,同时新List一个是string列表。赋值为读出的集合
			var xxx2 = (from a in db.Echarones.Where(m => m.EcharColmnId == SeachColumnString) select a.ObjNmae).ToList();
			List<string> listname = new List<string>();
			listname = xxx2;
			 
			///新 opt  ,opt就是模型,他针对Echars中的Option中的来建的,这样可以直接SetOption,不用再前台组合Json,属性要对着前台来看
			opt p = new opt();
			p.text = "这是后台数据";
			p.xAxis = new List<xAxis> {
				new xAxis{
				data=xxx2 }

			};
			p.series = new List<series> {
				new series{
					 name="任务",
					  //data=new List<int>{ 12, 23, 32, 34, 43, 45 }
					  data=listdouble
				}
			};
			p.series.Add(
				  new series
				  {
					  name = "完成数",
					  data = listdouble2
				  }); 
				
			///返回Json
			return Json(p, JsonRequestBehavior.AllowGet);
		}
	  

	}
	///index下的图表
	public class opt
	{
		//Text 为表的名称
		public string text { get; set; }
		//定义X轴
		public List<xAxis> xAxis { get; set; }
		//完成数和任务数的类集合
		public List<series> series { get; set; }

	}

	public class series
	{
		//下面两个属性和前台的Echars相对应,名称别错了
		public string name { get; set; }
		public List<double> data { get; set; }



	}

	public class xAxis
	{
		 
		public List<string> data{ get; set; }
	}


}

  

posted @ 2017-06-16 00:03  秋天来了哟  阅读(698)  评论(0)    收藏  举报
认识就是缘份,愿天下人都快乐!
QQ: 32316131
Email: 32316131@qq.com