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,一经查实,立即删除!

相关文章

数据安全 数据销毁_如何安全销毁敏感数据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;上面有敏…

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

代码&#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…

网络编程介绍

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

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;而标尺只能在完整的网络版本中找到。 标尺…

暑假个人小结

今天。。。不&#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…

SQL Server Management Studio清除历史登陆记录

今天做渗透,登陆目标服务器的数据库管理后发现留下了登陆的记录,自己鼓捣了半天,终于解决 删除C:\Documents and Settings\guest\Application Data\Microsoft\Microsoft SQL Server\90\Tools\Shell下的 mru.dat文件就可以了 本文转sinojelly51CTO博客&#xff0c;原文链接&…

停止抱怨英语_停止抱怨垂直视频

停止抱怨英语People have strong feelings about which direction video should be oriented. There are good reasons for that, but in some contexts, vertical video is completely fine and you should stop complaining about it. 人们对视频应该定向哪个方向有着强烈的感…

facebook_如何清除您的Facebook搜索记录

facebookSearch histories can tell a lot about you, and that’s especially true of Facebook’s search history. If you don’t want that sort of data left sitting around, here’s how to clear it. 搜索历史可以告诉您很多信息&#xff0c;Facebook的搜索历史尤其如此…

UI交互设计教程分享:提高界面交互体验的“葵花宝典”

​本次分享的是在界面设计中最长实用也最容易被忽略的十个原则&#xff0c;就是尼尔森十大可用性设计原则&#xff0c;这是十分基础且重要的原则。原则是死的&#xff0c;如何正确的结合到实际运用中才是关键。接下来我会通过对每一个原则的理解和现在移动端产品和结合进行分析…

window专业版激活

1、管理员权限进入命令行 2、安装密钥 slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX 3、设置kms服务器 slmgr /skms zh.us.to 4、查看是否激活 slmgr /ato 转载于:https://www.cnblogs.com/Edward-Yue/p/10942884.html

csv文件用什么打开_什么是CSV文件,如何打开它?

csv文件用什么打开A Comma Separated Values (CSV) file is a plain text file that contains a list of data. These files are often used for exchanging data between different applications. For example, databases and contact managers often support CSV files. 逗号…

Python连续攀升,其他的脚本语言去哪了?

Python在TIOBE排行榜排名连续攀升&#xff0c;它的优势掩盖了一个严肃的问题&#xff1a;其他的脚本语言去哪儿了?据2017年11月的TIOBE指数显示&#xff0c;其他语言(如Perl&#xff0c;PHP和Ruby)排名正在缓慢下滑。 不久之前&#xff0c;脚本语言风靡一时。动态类型语言不仅…

div水平垂直居中

水平垂直居中 效果 html <div class"m-box"><div class"m-temp"><div class"m-item">fsdafsfasdf</div><div class"m-item">fsdafsfasdf</div><div class"m-item">fsdafsfasdf&l…

禁用磁盘检查_如何在Windows上禁用“磁盘空间不足”警告

禁用磁盘检查Windows displays “Low Disk Space” notifications whenever any partition on your computer has less than 200 MB of space remaining. Here’s how to get rid of the notifications, even if you can’t free up the space. 只要计算机上任何分区的剩余空间…