• [ASP.NET MVC3] Razor Chart的使用总结


    ASP.NET3为我们带来了很多新特性,其中ChartHelper相当给力,介绍一下程序集里图表的功能,这个chart使用简单,且前台不需引用js脚本文件,可使用缓存文件,数据源方式很多,比较方便。

    图表的类型有以下很多种:

     

    成员名称

    说明

     

    Point

    点图类型。

     

    FastPoint

    快速点图类型。

     

    Bubble

    气泡图类型。

     

    Line

    折线图类型。

     

    Spline

    样条图类型。

     

    StepLine

    阶梯线图类型。

     

    FastLine

    快速扫描线图类型。

     

    Bar

    条形图类型。

     

    StackedBar

    堆积条形图类型。

     

    StackedBar100

    百分比堆积条形图类型。

     

    Column

    柱形图类型。

     

    StackedColumn

    堆积柱形图类型。

     

    StackedColumn100

    百分比堆积柱形图类型。

     

    Area

    面积图类型。

     

    SplineArea

    样条面积图类型。

     

    StackedArea

    堆积面积图类型。

     

    StackedArea100

    百分比堆积面积图类型。

     

    Pie

    饼图类型。

     

    Doughnut

    圆环图类型。

     

    Stock

    股价图类型。

     

    Candlestick

    K 线图类型。

     

    Range

    范围图类型。

     

    SplineRange

    样条范围图类型。

     

    RangeBar

    范围条形图类型。

     

    RangeColumn

    范围柱形图类型。

     

    Radar

    雷达图类型。

     

    Polar

    极坐标图类型。

     

    ErrorBar

    误差条形图类型。

     

    BoxPlot

    盒须图类型。

     

    Renko

    砖形图类型。

     

    ThreeLineBreak

    新三值图类型。

     

    Kagi

    卡吉图类型。

     

    PointAndFigure

    点数图类型。

     

    Funnel

    漏斗图类型。

     

    Pyramid

    棱锥图类型。

    1.后台初始化一个Chart方法如下:

     public ActionResult AccessStatisticsChart(DateTime startDate, DateTime endDate)
            {
                string key = "Access_" + startDate.ToString("yyyyMMdd") + "_" + endDate.ToString("yyyyMMdd");
                var chart = Chart.GetFromCache(key);//使用缓存
    
                if (chart == null)
                {
                    DateTime sDate = startDate;
                    List<string> xValue = new List<string>();
                    List<string> yValue = new List<string>();
                    Random myRandom = new Random();
                    while (startDate <= endDate)
                    {
                        xValue.Add(startDate.ToString("MM/dd"));
                        yValue.Add(myRandom.Next(10, 50).ToString());
                        startDate = startDate.AddDays(1);
                    }
    
                    chart = new System.Web.Helpers.Chart( 600, height: 300, theme: ChartTheme.Green)
                           .AddTitle("网站访问量统计图")
                           .AddSeries(name: "网站访问量", xValue: xValue, yValues: yValue, markerStep: 1, chartType: "line", axisLabel: "访问量")
                           .AddLegend(name: "网站访问量")
                           .SetXAxis(title: "日期").SetYAxis(title: "访问量");
                    chart.SaveToCache(key: key, minutesToCache: 5);
    
                    Session["xValue"] = xValue;
                    Session["yValue"] = yValue;
                }
    
                return new ChartResult(chart);
            }
    ChartResult 是自封装的一个类,这样使代码更简洁:
     public class ChartResult : ActionResult
        {
            private readonly Chart _chart;
            private readonly string _format;
    
            public Chart Chart { get { return _chart; } }
            public string Format { get { return _format; } }
    
            public ChartResult(Chart chart, string format = "png")
            {
                if (chart == null)
                    throw new ArgumentNullException("chart");
    
                _chart = chart;
                _format = format;
    
                if (string.IsNullOrEmpty(_format))
                    _format = "png";
            }
             
            public override void ExecuteResult(ControllerContext context)
            {
                _chart.Write(_format);
            } 
        }
    2.由于图表是Write出来的,在页面加载时直接显示占用整张页面,所以前台要返回一个View,然后在页面里面调用生成图表的方法,这个名为AccessStatisticsView的View前后台代码如下:
    public ActionResult AccessStatisticsView(DateTime startDate, DateTime endDate)
    {

      ViewBag.StartDateTime = startDate;
      ViewBag.EndDateTime = endDate;
      return PartialView();
    }

    -------------------------------------------------------
    @{
    ViewBag.Title
    = "用户访问量统计"; Layout = null; } <img src="@Url.Action("AccessStatisticsChart", new { startDate = ViewBag.startDateTime, endDate = ViewBag.EndDateTime })" />
     3.事件的入口可以用Ajax进行加载
        function confirmStatistics() {
                var startDate = $("#startDate").val();
                var endDate = $("#endDate").val();
                if (startDate == "") { alert("请选择开始日期"); }
                if (endDate == "") { alert("请选择结束日期"); }
                $("#statisticsResult").load("/Statistics/AccessStatisticsView", { 'startDate': startDate, 'endDate': endDate });
             }

    4.运行效果图:

    5.图表可以生成XML文件,生成方法如下:

      [HttpPost]
            public ActionResult SaveASXML(DateTime startDate, DateTime endDate)
            {
                string key = "Access_" + startDate.ToString("yyyyMMdd") + "_" + endDate.ToString("yyyyMMdd");
                var chart = Chart.GetFromCache(key);
                if (chart == null)
                {
                    return this.JsonResult2("fail", "未查询到图表缓存,请先进行统计.");
                }
                string filePathName = SysConfig.StatisticsXMlParh + @"" + key + ".xml";
    
                if (!System.IO.Directory.Exists(SysConfig.StatisticsXMlParh))
                {
                    System.IO.Directory.CreateDirectory(SysConfig.StatisticsXMlParh);
                }
    
                chart.SaveXml(path: filePathName);
                return this.JsonResult2("suc", "生成XML文件成功.");
            }
            [HttpPost]

    6.图表可以保存为图表,放下如下:

      [HttpPost]
            public ActionResult SaveASImg(DateTime startDate, DateTime endDate)
            {
                string key = "Access_" + startDate.ToString("yyyyMMdd") + "_" + endDate.ToString("yyyyMMdd");
                var chart = Chart.GetFromCache(key);
                if (chart == null)
                {
                    return this.JsonResult2("fail", "未查询到图表缓存,请先进行统计.");
                }
                string filePathName = SysConfig.StatisticsImgParh + @"" + key + ".png";
    
                if (!System.IO.Directory.Exists(SysConfig.StatisticsImgParh))
                {
                    System.IO.Directory.CreateDirectory(SysConfig.StatisticsImgParh);
                }
    
                chart.Save(path: filePathName);
                return this.JsonResult2("suc", "保存图片文件成功.");
            }
  • 相关阅读:
    BlockingQueue
    序列化存取数据库(spring+mybatis+oracle) 以及可能会遇到的数据库取出的数据反序列化失败问题
    关于junit不抛出异常
    关于ByteArrayInputStream、ByteArrayOutputStream 和 ObjectInputStream、ObjectOutputStream
    sc delete mysql命令执行失败
    python中的值传递和引用传递
    flask实现模仿知乎
    协程和装饰器完成简易计算器
    微信JSAPI支付接口,支付完成后关闭当前窗口
    Java关键字transient和volatile小结
  • 原文地址:https://www.cnblogs.com/wangchengshen/p/3853325.html
Copyright © 2020-2023  润新知