web开发经验—MVC 图表Chart

Mvc  Chart 是一个使用起来非常方便的控件,可以自定义参数,能呈现给用户很漂亮的各种统计图表;使用此图表首先要导入命名空间:System.Web.UI.DataVisualization.Charting

此dll在vs自带的里面,它的位置: C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.DataVisualization.dll

效果图如下:

由于mvc 返回的是actionResult,而此图表chart返回的是图片,所以要封装一个ImageResult,如下:

 public class ImageResult : ActionResult
    {
        public ImageResult()
        { }

        public ImageResult(Image image)
        {
            Image = image;
        }

        public ImageResult(Image image, ImageFormat format)
        {
            Image = image;
            ImageFormat = format;
        }

        /// <summary>
        ///
        /// </summary>
        public Image Image { get; set; }

        /// <summary>
        /// 指定图像的文件格式
        /// </summary>
        public ImageFormat ImageFormat { get; set; }

        public override void ExecuteResult(ControllerContext context)
        {
            if (Image == null)
                throw new ArgumentNullException("Image");

            if (ImageFormat == null)
                throw new ArgumentNullException("ImageFormat");

            context.HttpContext.Response.Clear();

            if (ImageFormat.Equals(ImageFormat.Gif))
                context.HttpContext.Response.ContentType = "image/gif";
            else if (ImageFormat.Equals(ImageFormat.Jpeg))
                context.HttpContext.Response.ContentType = "image/jpeg";
            else if (ImageFormat.Equals(ImageFormat.Png))
                context.HttpContext.Response.ContentType = "image/png";
            else if (ImageFormat.Equals(ImageFormat.Bmp))
                context.HttpContext.Response.ContentType = "image/bmp";
            else if (ImageFormat.Equals(ImageFormat.Tiff))
                context.HttpContext.Response.ContentType = "image/tiff";
            else if (ImageFormat.Equals(ImageFormat.Icon))
                context.HttpContext.Response.ContentType = "image/vnd.microsoft.icon";
            else if (ImageFormat.Equals(ImageFormat.Wmf))
                context.HttpContext.Response.ContentType = "image/wmf";

            Image.Save(context.HttpContext.Response.OutputStream, ImageFormat);
        }
    }

后台代码如下:

   #region MVC Chart

        public ActionResult MVCChart()
        {
            return View();
        }

        public ActionResult ChartView()
        {
            return PartialView();
        }
        public ActionResult ZhuChart()
        {
            System.Web.UI.DataVisualization.Charting.Chart chart = new System.Web.UI.DataVisualization.Charting.Chart();
            chart.Width = 750;
            chart.Height = 400;
            chart.RenderType = RenderType.ImageTag;
            chart.Palette = ChartColorPalette.BrightPastel;
            Title t = new Title("活动数量分布", Docking.Top, new System.Drawing.Font("Trebuchet MS", 14, System.Drawing.FontStyle.Bold), System.Drawing.Color.FromArgb(26, 59, 105));
            chart.Titles.Add(t);

            chart.ChartAreas.Add("Subject");
            chart.ChartAreas[0].AxisX.Interval = 1;   //设置X轴坐标的间隔为1
            chart.ChartAreas[0].AxisX.IntervalOffset = 1;  //设置X轴坐标偏移为1
            chart.ChartAreas[0].AxisX.LabelStyle.IsStaggered = false;   //设置是否交错显示,比如数据多的时间分成两行来显示

            chart.Series.Add("Subject");

            chart.Series["Subject"].Label = "#VAL";
            chart.Series["Subject"].LegendText = "活动数量";

            List<string> actives = new List<string>();
            for (int i = 0; i < 10; i++)
            {
                actives.Add("活动" + i.ToString());
            }
            Random rd = new Random();

            foreach (var item in actives)
            {
                chart.Series["Subject"].Points.AddXY(item, rd.Next(50, 80));
            }

            chart.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;
            chart.BorderColor = System.Drawing.Color.FromArgb(26, 59, 105);
            chart.BorderlineDashStyle = ChartDashStyle.Solid;
            chart.BorderWidth = 2;
            // chart.BackColor = Color.Green;
            chart.Legends.Add("Legend1");

            MemoryStream stream = new MemoryStream();
            chart.SaveImage(stream, ChartImageFormat.Jpeg);

            return new ImageResult(Image.FromStream(stream), ImageFormat.Jpeg);
        }

        public ActionResult pieChart()
        {
            List<string> xValues = new List<string>();
            List<string> yValues = new List<string>();
            List<string> actives = new List<string>();
            for (int i = 0; i < 10; i++)
            {
                actives.Add("活动" + i.ToString());
            }
            Random rd = new Random();

            foreach (var item in actives)
            {
                xValues.Add(item);
                yValues.Add(rd.Next(10, 30).ToString());
            }

            System.Web.UI.DataVisualization.Charting.Chart pieChar = new System.Web.UI.DataVisualization.Charting.Chart();
            pieChar.Series.Add("Default");
            pieChar.Series["Default"].Points.DataBindXY(xValues, yValues);
            pieChar.Series["Default"].Label = "#AXISLABEL #VAL";
            pieChar.Series["Default"].LegendText = "#AXISLABEL #PERCENT{P1}";
            Title pieTitle = new Title("加分项活动比例", Docking.Top, new System.Drawing.Font("Trebuchet MS", 14, System.Drawing.FontStyle.Bold), System.Drawing.Color.FromArgb(26, 59, 105));
            pieChar.Titles.Add(pieTitle);

            pieChar.Width = 380;
            // Set Doughnut chart type
            pieChar.Series["Default"].ChartType = SeriesChartType.Pie;
            // Set labels style
            pieChar.Series["Default"]["PieLabelStyle"] = "Inside";
            // Set Doughnut radius percentage
            pieChar.Series["Default"]["DoughnutRadius"] = "70";
            // Explode data point with label "Italy"
            //pieChar.Series["Default"].Points[4]["Exploded"] = "true";
            // Enable 3D
            pieChar.ChartAreas.Add("ChartArea1");
            pieChar.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true;

            // Disable the Legend
            pieChar.Legends.Add("Lengenedpie");
            pieChar.Legends[0].Enabled = true;

            MemoryStream stream = new MemoryStream();
            pieChar.SaveImage(stream, ChartImageFormat.Jpeg);

            return new ImageResult(Image.FromStream(stream), ImageFormat.Jpeg);
        }

        public ActionResult lineChart()
        {
            System.Web.UI.DataVisualization.Charting.Chart chart = new System.Web.UI.DataVisualization.Charting.Chart();
            chart.Width = 830;
            chart.Height = 500;
            chart.RenderType = RenderType.ImageTag;
            chart.Palette = ChartColorPalette.BrightPastel;
            Title t = new Title("污水处理实时曲线", Docking.Top, new System.Drawing.Font("Trebuchet MS", 14, System.Drawing.FontStyle.Bold), System.Drawing.Color.FromArgb(26, 59, 105));
            chart.Titles.Add(t);
            chart.ChartAreas.Add("Default");

            List<string> actives = new List<string>();
            for (int i = 0; i < 5; i++)
            {
                actives.Add("活动" + i.ToString());
            }

            Random rd = new Random();
            foreach (var item in actives)
            {
                chart.Series.Add(item.ToString());

                chart.Series[item.ToString()].LegendText = item;
                chart.Series[item.ToString()].ChartType = SeriesChartType.Line;
                chart.Series[item.ToString()].XValueType = ChartValueType.DateTime;

                for (int i = 0; i < 10; i++)
                {
                    chart.Series[item.ToString()].Points.AddXY(DateTime.Now.AddDays(0 - i).ToOADate(), rd.Next(10, 100));
                }
            }

            chart.ChartAreas["Default"].AxisX.LabelStyle.IsStaggered = false;
            chart.ChartAreas["Default"].AxisX.LabelStyle.Format = "HH:mm";

            chart.BorderColor = System.Drawing.Color.FromArgb(26, 59, 105);
            chart.BorderlineDashStyle = ChartDashStyle.Solid;
            chart.BorderWidth = 2;
            chart.Legends.Add("Legend1");
            chart.ChartAreas["Default"].AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount;

            MemoryStream stream = new MemoryStream();
            chart.SaveImage(stream, ChartImageFormat.Jpeg);
            return new ImageResult(Image.FromStream(stream), ImageFormat.Jpeg);
        }
        #endregion

前台页面加载图表可以用ajax,代码如下:

MVCChart 页面的代码:

@{
    ViewBag.Title = "MVCChart";
}
<script type="text/javascript">
    $(function () {
        loadChart();
    })

    function loadChart() {
        $("#zhu").load("/Report/ChartView");
    }
</script>
<div id="zhu" style="width:100%"></div>

ChartView的页面代码:

@{
    ViewBag.Title = "ZhuView";
}
<table style="width: 100%">
    <tr>
        <td>
            <img src="@Url.Action("ZhuChart")" alt="柱状图"/>
        </td>
    </tr>
    <tr>
        <td>
            <img src="@Url.Action("pieChart")" alt="饼状图"/>
        </td>
    </tr>
    <tr>
        <td>
            <img src="@Url.Action("lineChart")" alt="曲线图"/>
        </td>
    </tr>
</table>
时间: 2024-08-27 04:05:19

web开发经验—MVC 图表Chart的相关文章

[转]移动web开发经验总结

1.-webkit-tap-highlight-color:rgba(255,255,255,0)可以同时屏蔽ios和android下点击元素时出现的阴影. 备注:transparent的属性值在android下无效. 2.-webkit-appearance:none可以同时屏蔽输入框怪异的内阴影. 3.-webkit-transform:translate3d(0, 0, 0)在ios下可以让动画更加流畅(这个属性会调用硬件加速模式),但是在android下不可乱用,很多见所未见的bug就是

web开发经验——富头像上传编辑器的使用

富头像编辑器是一个很好的头像图片上传控件,能够对图片进行简单的处理,例如:剪切.调节亮度等功能:富头像编辑器拥有很的参数配置,可根据自己的需要配置控件的功能:该控件要求浏览器需安装Flash Player后才能使用:下面是我做的一个小的Demo以说明富头像编辑器的使用方法. 1.前台页面 需引用js文件和初始化富头像编辑器,脚本代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /

在智能电视中的实时数据呈现web开发经验分享

先上图,一睹为快. 看到图,身为资源web开发者的你,是不是在大脑中闪现出了一个个的技术名词,websocket.html5.css3(animation/transition).javascript(ajax/setTimeout/setInterval). 同样专注web开发xx年的你,有没有考虑到以下问题: 1.实时数据展现,如果采用ajax定时拉取对现有业务的影响,在DB性能这块,可能导致DB服务死去 2.采用客户端主动拉取还是服务器端的推技术,服务器推技术似乎实现起来太多麻烦,后端的配

传统的web和MVC处理方式

今天主要来学习一下传统的web和mvc处理方式的异同点. 先看web处理方式. 左边是客户端.右边是服务器软件 .服务器会有一个IIS 服务器软件.从客户端发送的请求(例如www.TGB.cn/index.asp)被IIS接收 由它交给framework(IIS7 里有集成),framework 根据请求的地址 执行page_load 会创建一个对应的页面类对象.也就是在服务器 index 被编译成一个类. 该类的方法会准备一些要输出的HTML 或其它内容. 换句话说,在服务端 它以为自己请求的

SSM报错:No converter found for return value of type: class java.util.ArrayList at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverter

我使用的是SSM框架,是在编写测试RESTFUL接口的时候出现, @RequestMapping(value = "/selectAll", method = RequestMethod.GET) @ResponseBody public ResponseEntity<List<User>> selectAll() { List<User> users = this.userService.selectAll(); if (null != users

Caused by: java.lang.ClassNotFoundException: org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

严重: StandardWrapper.Throwableorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping': Invocation of init method failed; nested excepti

org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping

配置spring+shiro时,启动tomcat报错异常 严重: Context initialization failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping': Invocation of i

[转]一些实用的图表Chart制作工具

最近工作过程中需要用到前端一些JS框架,看到一篇博文就转过来备份使用,后续会再完善一些材料. Flot Flot一个纯javascript绘画库,基于jQuery开发.它能够在客户端根据任何数据集快速生成图片.目前只能绘制线状图和柱状. JQchart 基于Canvas+jQuery,可拖放/交互的简单图形控件. Open Flash Chart Open Flash Chart是一个开源的Flash制图组件. PlotKit PlotKit是一个纯javascript绘图工具包.它支持HTML

web前段canvasjs图表制作一

关于web图表制作的方法有很多种,大家可以去网上这里我就介绍我经常使用的一种方法CanvasJS,这也是一款非常容易掌握并且好用的一种方法. 首先可以去网上下载canvasjs.js插件.下载路径:http://canvasjs.com/assets/script/canvasjs.min.js 1:关于折线图制作方法: 前台代码如下: <script type="text/javascript"> window.onload=function(){ var play=ne