HighCharts图表控件在ASP.NET WebForm中的使用总结(全)

作者:mrr 时间:2022-07-13 02:11:12 

从事过ASP.NET开发的可能都会接触到一些图表控件,比如OWC、ZendGraph等等,这些控件都有一个特点,那就是我们可以像操作.NET中的对象一样控制它们的某些属性,有可能在本地开发好了上传到服务器端部署运行的时候会出现权限问题而导致不能正常运行。本篇周公讲述一个JavaScript的图表控件,不要小看了这个JavaScript图表控件,它能生成各种常见的图表。

Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习、个人网站和非商业用途使用。目前HighCharts支持的图表类型有曲线图、区域图、柱状图、饼状图、散状点图和综合图表。

  HighCharts使用原理如下图所示:

HighCharts图表控件在ASP.NET WebForm中的使用总结(全) 

普通开发模式是在前端应用Jquery和HighChartsJS库文件,然后在<head>头中写Js脚本,例如绘制饼图Jquery脚本如下:

 绘制饼图Jquery脚本


$(function () {
 $('#container').highcharts({
  chart: {
   plotBackgroundColor: null,
   plotBorderWidth: null,
   plotShadow: false
  },
  title: {
   text: 'Browser market shares at a specific website, 2010'
  },
  tooltip: {
   pointFormat: '{series.name}: <b>{point.percentage}%</b>',
   percentageDecimals: 1
  },
  plotOptions: {
   pie: {
    allowPointSelect: true,
    cursor: 'pointer',
    dataLabels: {
     enabled: true,
     color: '#000000',
     connectorColor: '#000000',
     formatter: function() {
      return '<b>'+ this.point.name +'</b>: '+ this.percentage +' %';
     }
    }
   }
  },
  series: [{
   type: 'pie',
   name: 'Browser share',
   data: [
    ['Firefox', 45.0],
    ['IE',  26.8],
    {
     name: 'Chrome',
     y: 12.8,
     sliced: true,
     selected: true
    },
    ['Safari', 8.5],
    ['Opera',  6.2],
    ['Others', 0.7]
   ]
  }]
 });
});

其中data属性为图表绑定数据源。但这种方式也存在明显问题:

前端代码量过大
绑定动态数据比较困难,可取的方法是使用$.AJAX异步方法解析WebServices或者一般处理程序ashx,然后对返回结果进行JSON序列化处理,比较麻烦容易出错。
HighCharts的Js调用代码无法实现代码重用。
  解决方案是使用第三方HighCharts组件DoNet.HighCharts, 该组件是一个服务器端生成HighCharts Js脚本的开源组件,然后通过输出流的方式插入到页面Body块的DIV中,原理如下图所示:

  HighCharts图表控件在ASP.NET WebForm中的使用总结(全)

DoNet.HighCharts开发环境为(二选一)

VS2008+ASP.NET MVC3+.NET 3.5
VS2010+.NET 4.0
  DoNet.HighCharts开源项目是以ASP.NET MVC3 Project的形式分发的,开发人员可以参考控制器文件夹Controlls中的DemoController中每种图表的后台代码(和前台HighCharts JS代码基本一致)

HighCharts图表控件在ASP.NET WebForm中的使用总结(全) 

  MVC原理在这里做简单表述,便于程序员阅读该代码。

M:Module 模型层
V:View 视图层
C:Controll 控制层
  当客户端发送一个Action动作时,根据动作名找到Controll控制器中相应的方法名。例如 http://localhost/Charts/Demo/BasicLine,MVC 框架根据全局路由配置自动映射到BasicLine控制器方法,控制器方法返回一个Result并导航到Views文件夹下的同名视图BasicLine.cshtml(cshtml可以理解为WebForm的aspx)然后加载视图。

  Asp.net mvc和Asp.net Web Form方式不同,所以以上MVC实现方式需要修改才能在WebForm中使用。以下以“各种类产品均价统计功能”柱形图(涉及到NorthWind数据库的Products和Categories表)为例说明WebForm中如何使用DoNet.HighCharts。

1:   创建查询视图View_CategoryAvgPrice

  HighCharts图表控件在ASP.NET WebForm中的使用总结(全)

2:   创建强名称数据集NorthWind.xsd

  HighCharts图表控件在ASP.NET WebForm中的使用总结(全)

  数据集分为强名称数据集和弱名称数据集(DataSet)两种,具体原理就不展开描述了。拖放View_CategoryAvgPrice和Categories表到数据集中。

3:   柱形图控制器方法(ColumnWithDrilldown)在aspx页面中的主要代码实现

 柱形图控制器方法(ColumnWithDrilldown)在aspx页面中的主要代码实现


//导入DoNet.HighCharts包
using DotNet.Highcharts;
using DotNet.Highcharts.Options;
using DotNet.Highcharts.Enums;
using DotNet.Highcharts.Helpers;
using System.Drawing;
using NorthWindTableAdapters;
/// <summary>
/// 种类商品价格统计类
/// </summary>
public class CategoryPrice
{
public Decimal Price { set; get; }
public string CategoryName { set; get; }
}
public partial class ColumnWithDrilldown : System.Web.UI.Page
{
#region 创建强名称数据集表对象和数据适配器对象
private NorthWind.View_CategoryAvgPriceDataTable avgPriceDt;
avgPriceDt= new NorthWind.View_CategoryAvgPriceDataTable();
private NorthWind.CategoriesDataTable categoryDt = new NorthWind.CategoriesDataTable();
private View_CategoryAvgPriceTableAdapter avgPriceAdapter = new View_CategoryAvgPriceTableAdapter();
private CategoriesTableAdapter categoryAdapter = new CategoriesTableAdapter();
#endregion
private List<CategoryPrice> avgPriceList=null;//绑定数据源集合
protected void Page_Load(object sender, EventArgs e)
{
 LoadColumnWithDrilldown();
}
public void LoadColumnWithDrilldown()
{
 avgPriceAdapter.Fill(avgPriceDt);
 categoryAdapter.Fill(categoryDt);
 //按产品种类分组显示Linq表达式
  avgPriceList =
   (
    from p in avgPriceDt
    group p by p.CategoryID into g//根据种类编号分组
    select new CategoryPrice
    {
     //种类名称
     CategoryName=categoryDt.First(c=>c.CategoryID==g.Key).CategoryName,
     //种类商品均价
     Price = g.Average(c => c.UnitPrice)
    }
   ).ToList();
 //显示柱形图的种类名称数组
 string[] categories = new string[avgPriceList.Count()];
 int index = 0;
 foreach (var item in avgPriceList)
 {
  categories[index++] = item.CategoryName;
 }
 Data data = LoadDate();//柱形图动态绑定的数据源
 //省略HighCharts脚本代码,同mvc代码
 div1.InnerHtml = chart.ToHtmlString();//转换为HighCharts的客户端脚本插入到div1中
}
//根据汇总的种类商品创建柱形图节点对象的方法
private Data LoadDate()
{
  Data data = null;
  int index =-1;
  //创建柱形图显示的节点对象
  DotNet.Highcharts.Options.Point []pointList=new DotNet.Highcharts.Options.Point[avgPriceList.Count];
  foreach (var item in avgPriceList)
  {
   pointList[++index] = new DotNet.Highcharts.Options.Point
   {
    Y = (Number)(item.Price*100)/100.0,
    Color = Color.FromName(string.Format("colors[{0}]", index))
   };
  }
  data = new Data(pointList);
  return data;
}
}

显示效果如下图所示:

HighCharts图表控件在ASP.NET WebForm中的使用总结(全) 

标签:highcharts图表
0
投稿

猜你喜欢

  • 解决MyEclipse中Maven设置jdk版本jdk1.8报错问题

    2022-04-20 18:19:04
  • Java基础高级综合练习题扑克牌的创建

    2023-09-08 06:56:19
  • Jmeter测试必知的名词及环境搭建

    2022-11-23 19:34:07
  • Spring Boot集成Shiro实现动态加载权限的完整步骤

    2023-02-18 17:43:10
  • SpringBoot下使用MyBatis-Puls代码生成器的方法

    2023-11-25 17:07:07
  • java使用common-fileupload实现文件上传

    2022-03-06 03:21:08
  • SpringBoot 如何实现异步编程

    2023-04-15 13:45:43
  • 细谈java同步之JMM(Java Memory Model)

    2023-11-23 13:09:33
  • 利用Java生成带有文字的二维码

    2022-05-21 15:01:38
  • Unity使用ScrollRect制作翻页

    2023-05-22 09:10:44
  • Android 判断是否连接成功了指定wifi

    2021-10-21 04:59:10
  • java开发微信分享接口的步骤

    2021-08-22 12:30:59
  • C#中Convert.ToDecimal()报错问题的解决

    2022-05-09 06:05:56
  • java文件处理工具类详解

    2022-12-19 22:49:59
  • 详解MyBatis配置typeAliases的方法

    2023-11-29 06:21:52
  • JAVA导出EXCEL表格的实例教学

    2021-11-21 01:47:28
  • JUC系列学习工具类CountDownLatch详解

    2023-10-01 12:19:23
  • Java实现接月饼小游戏的示例代码

    2022-08-16 03:26:06
  • C# XML序列化方法及常用特性总结分析

    2021-12-27 02:23:33
  • WinForm实现为TextBox设置水印文字功能

    2023-06-09 21:15:38
  • asp之家 软件编程 m.aspxhome.com