ZedGraph在项目中的应用

ZedGraph在项目中的应用
    将数据库数据提取出来,显示成曲线图(饼状、柱状或立体图)是项目中最常见的需求。 网上搜索到的解决方法,大多归为两类,一种是利用ActiveX组件,另一种是使用.net框架自带的画图的类。前者开发比较方便,但浏览时需要用户下载ActiveX插件(而这个往往是忌讳的,插件带毒)。后者,需要你自己写绘图、生成图片的类库,不过在开源社区已有不少的项目针对这个问题,做出了实现。ZedGraph是其中之一,网上的评论大多如是说:使用方便,易上手。
    ZedGraphc#编写的类库,提供了用户控件和web控件。官网的例子提供了在windows窗体上显示图片的源码,而如何将它应用到web项目中,却没有任何介绍(或许是我没找到),web控件才是项目中有价值的东东。一番搜索后,搂到了一些实现,确实!它已经封装到相当优秀的程度,举个例子:
    我们在画曲线图的时候,往往为如何设计XY轴的坐标而头疼,如何设置它数值范围、设置单元间距等,才能让我们的数据显示得尽量完整和精确。而它的设计是,只要你提供数据,X/Y轴的问题不用管——它会找出数据范围,然后设置合理的显示域和单元间距。下面是一个简单的实现,将数据库数据生成一张曲线图和柱状图,如此它便可以被这样的方式,显示到页面上:
 <body>
    
<img src="Pic.aspx">
</body> 

    首先,你需要将两个dll引用至你的工程,ZedGraph.dllZedGraph.web.dll。接下来,是你要生成图片的页面,暂且命名为pic.aspx,将它的html标签部分去掉,添加ZEDGRAPHWEB控件:
<%@ Page language="c#" Codebehind="PriceTimePic.aspx.cs" AutoEventWireup="false" 
    Inherits="Herbalife.HelpDesk.UI.ReportManage.PurchaseReport.PriceTimePic" 
%>
<%@ Register TagPrefix="zgw" Namespace="ZedGraph.Web" Assembly="ZedGraph.Web"%>
<ZGW:ZEDGRAPHWEB id="ZG" runat="server" width="500" Height="375" RenderMode="RawImage" />
     
然后,我们到pic.aspx.cs下,添加包引用:using ZedGraph; using ZedGraph.Web;,添加控件对象的声明:protected ZedGraph.Web.ZedGraphWeb ZG;。接下来在InitializeComponent()方法中注册一个事件:

// OnRenderGraph 绘图方法
this.ZG.RenderGraph += new ZedGraph.Web.ZedGraphWebControlEventHandler(this.OnRenderGraph);
    下面便是绘图方法了:


private void OnRenderGraph(System.Drawing.Graphics g, ZedGraph.MasterPane masterPane)
{
    GraphPane myPane = masterPane[0];

    
// Title
    myPane.Title.Text = "供应商 价格-时间曲线图";
    myPane.XAxis.Title.Text = "
时间";
    myPane.YAxis.Title.Text = "
价格";

    
// 坐标对集合
    PointPairList line = new PointPairList();

    
// 取数据部分
    DataTable dt = GetData();

    
// 将数据转为(X,Y)坐标对
    for(int i=0;i<dt.Rows.Count;i++) 
    {
        
/*
         *    
添加坐标对,需要将X/Y值全部转为double类型。原本以为他们会支持DateTime类型。
         *   
个人觉得还是很有必要的,毕竟很多图都是时间-**曲线图,有需求。
         */

        
string date = Convert.ToDateTime(dt.Rows[i]["RecTime"]).ToString("yyyyMMdd");
        line.Add(Convert.ToDouble(date), Convert.ToDouble(dt.Rows[i]["Price"]));
    }

    
// 绘制曲线
    LineItem li = myPane.AddCurve("aaa",line, Color.Blue);
    masterPane.AxisChange(g);
}
效果图如下:
由于日期类型转换成double型,结果X轴还是比较难看的。目前正在研究它的类库,应该可以更改的。
饼状图,则需要修改OnRenderGraph方法:
private void OnRenderGraph(System.Drawing.Graphics g, ZedGraph.MasterPane masterPane)
{
    GraphPane myPane = masterPane[0];

    
// Title
    myPane.Title.Text = "供应商 价格-时间曲线图";
    myPane.XAxis.Title.Text = "
时间";
    myPane.YAxis.Title.Text = "
价格";

    
// 坐标对集
    PointPairList line = new PointPairList();

    DataTable dt = GetData();

    
for(int i=0;i<dt.Rows.Count;i++) 
    {
        
string date = Convert.ToDateTime(dt.Rows[i]["RecTime"]).ToString("yyyyMMdd");
        line.Add(Convert.ToDouble(date), Convert.ToDouble(dt.Rows[i]["Price"]));
    }

    BarItem myCurve = myPane.AddBar("aaa", line, Color.Blue);
    myCurve.Bar.Fill = 
new Fill(Color.Blue, Color.White, Color.Blue);

    myPane.XAxis.MajorTic.IsBetweenLabels = 
true;
     
// XLabel
    string[] labels = new string[dt.Rows.Count];
    
for(int i=0;i<dt.Rows.Count;i++)
        ls[i] = Convert.ToDateTime(dt.Rows[i]["RecTime"]).ToString("yyyy/MM/dd");
    myPane.XAxis.Scale.TextLabels = labels;
    myPane.XAxis.Type = AxisType.Text;

    
// 颜色填充
    myPane.Fill = new Fill(Color.White, Color.FromArgb(200, 200, 255), 45.0f);
    myPane.Chart.Fill = 
new Fill(Color.White, Color.LightGoldenrodYellow, 45.0f);
 
    masterPane.AxisChange(g);
}
效果图:
 




本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/202155,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP/IP:IP多播选路

本节主要讨论多播选路&#xff0c;是在整个互联网上的多播&#xff0c;我们将讨论mrouted程序的执行&#xff0c;该程序计算多播路由表&#xff0c;以及再网络之间转发多播数据包的内核函数。 多播输出处理 这个和IGMP的输出处理类似&#xff0c;主要要注意有环回的多播输出和没…

Leetcode#832. Flipping an Image(翻转图像)

题目描述 给定一个二进制矩阵 A&#xff0c;我们想先水平翻转图像&#xff0c;然后反转图像并返回结果。 水平翻转图片就是将图片的每一行都进行翻转&#xff0c;即逆序。例如&#xff0c;水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。 反转图片的意思是图片中的 0 全部被 1 替换&a…

数据安全 数据销毁_如何安全销毁敏感数据CD / DVD?

数据安全 数据销毁You have a pile of DVDs with sensitive information on them and you need to safely and effectively dispose of them so no data recovery is possible. What’s the most safe and efficient way to get the job done? 您有一堆DVD&#xff0c;上面有敏…

cannot find -lunwind-x86_64

错误代码&#xff1a;; }) libtool: install: /usr/bin/install -c .libs/libunwind.lai /usr/local/lib/libunwind.la libtool: install: warning: relinking libunwind-setjmp.la libtool: install: (cd /down/libunwind-1.0/src; /bin/sh /down/libunwind-1.0/libtool --…

动态切换父元素隐藏和显示里面的子元素的动画会再一次执行吗?

代码&#xff1a;完整代码:<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title></title> <style type"text/css"> *{ margin: 0; padding: 0; } .box{ background-color: #00B83F; } .flag{ position…

MAD huashi

name1 input("请输入一个名字") name2 input("请输入一个名词") name3 input("请输入一个形容词") name4 input("请输入一个名字") name5 input("请输入一个名字") name6 input("请输入一个长辈名字") name…

如何使用QuickConnect远程访问Synology NAS

Your Synology NAS includes a QuickConnect feature that lets you access its DiskStation Manager interface remotely. Here’s how to set it up. Synology NAS包含快速连接功能&#xff0c;可让您远程访问其DiskStation Manager界面。 设置方法如下。 You were likely gr…

深入MySQL存储引擎分析锁和排序的原理

几个问题 为什么不建议使用订单号作为主键?为什么要在需要排序的字段上加索引?for update 的记录不存在会导致锁住全表?redolog 和 binlog 有什么区别?MySQL 如何回滚一条 sql ?char(50) 和 varchar(50) 效果是一样的么?索引知识回顾 对于 MySQL 数据库而言,数据是存储在…

网络编程介绍

1. 目标:编写一个C/S架构的软件 C/S: Client--------基于网络----------Server B/S: Browser-------基于网络----------Server2. 服务端需要遵循的原则: 1. 服务端与客户端都需要有唯一的地址,但是服务端的地址必须固定/绑定 2. 对外一直提供服务,稳定运行 3. 服…

[Web开发] MySpace 发布开发接口

2007年风头最盛的Web 2.0公司应该就是Facebook &#xff0c;其一炮走红的绝招就是它的开发平台。 开发者可以为Facebook 加入各种插件&#xff0c;丰富Facebook 。为了对抗 Facebook &#xff0c; 社交网站的老大Myspace 也推出了自己开发平台 http://developer.myspace.com/c…

css段落缩进_如何缩进Google文档中的段落

css段落缩进Indenting paragraphs in Google Docs requires access to the ruler, which you’ll only find in the full web version. The ruler is not present in the mobile apps. 在Google文档中缩进段落需要访问标尺&#xff0c;而标尺只能在完整的网络版本中找到。 标尺…

卡包模板

$json_data array(); $json_data[request_id] date(YmdHis).mt_rand(10000,99999); $json_data[card_type] OUT_MEMBER_CARD; $json_data[biz_no_prefix] prex; $json_data[biz_no_suffix_len] 10; $json_data[write_off_type] qrcode; #qrcode: 二维码 dqrcode: 动态二维…

暑假个人小结

今天。。。不&#xff0c;是昨天&#xff0c;聂老大让我们写暑期总结 其中有这么一个 &#xff08;300字啊。。。我得好好想想怎么编&#xff09; 嘛&#xff0c;在这写点不敢交上去的内容吧。 7月总结 我收获了什么 很多课件 两个qq群 slay.one被人虐 联盟无畏先锋的号到了20级…

php-fpm with php-5.3.2 + APC

php-fpm 现在php官方内部已经出版本了&#xff0c;据说以后会出现在 php core 里&#xff0c;如果现在安装的话&#xff0c;可以svn得到最新代码,我抢先为快。 至于缓存&#xff0c;我用的facebook 试用的apc 测试了一段时间还很&#xff0c;满意。wget ftp://ftp.csx.cam.ac.u…

kotlin 初始化数组

为什么80%的码农都做不了架构师&#xff1f;>>> //初始化5个元素的数组&#xff0c;每个都为"0" val a:Array<String> Array(5, {"0"}) // val a:Array<String> Array(5, {"0"}) println(a.joinToString(separator &…

Tomcat - Tomcat安装

Tomcat官网&#xff1a;http://tomcat.apache.org/ 准备&#xff1a;JAVA环境布置完成 一、Windows平台 1. 版本选择 1&#xff09; 进入官网 2&#xff09; 查看版本匹配 官网说明 https://tomcat.apache.org/whichversion.html 3&#xff09; 需要查看已安装JAVA版本请打开终…

sonos 服务器_如何在Sonos上收听有声读物

sonos 服务器Audible, Amazon’s subscription audiobook service, was conspicuously absent from Sonos for the last few years. Thankfully, it’s now back. Here’s how to use it. 过去几年&#xff0c;Sonos明显缺少Amazon的订阅有声读物服务Audible。 幸运的是&#x…

常用sed四个功能

1. 替换 文件&#xff1a;test.txt abc aaa 命令&#xff1a;sed /.*/a/d/g test.txt&#xff08;将文件中所有的a替换成d&#xff09; 结果&#xff1a; dbc ddd 2. 删除 文件&#xff1a;test.txt abc aaa 命令&#xff1a;sed /a$/d test.txt&#xff08;将文件中所有以a结尾…

bind 0.0.0.0的作用是什么呢?

背景描述&#xff1a; 今天在看redis的内容&#xff0c;看到同事在配置文件中将bind配置为0.0.0.0进行监听&#xff0c;不明白什么意思就查询了下&#xff0c;在此记录下。 解释&#xff1a; 0.0.0.0在服务器的环境中&#xff0c;指的就是服务器上所有的ipv4地址&#xff0c;如…

约数的个数

Description mmoaay小侄子今年上初中&#xff0c;老师出了一道求约数个数的题目&#xff0c;比如8的约数有1,2,4,8共4个。 当数比较小的时候可以人工算&#xff0c;当n较大时就难了。 mmoaay嫌麻烦&#xff0c;现在让你编个程序来算。 Input 一行一个整数。最后以0结束。 Outpu…