热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GridView+ZedGraph【转】

edgraph图表控件的强大功能令人出乎意料,与OWC相比我想应该毫不逊色,近来需求要求作出相关数据统计,不想使用BI这类的强大东西&#x

edgraph图表控件的强大功能令人出乎意料,与OWC相比我想应该毫不逊色,近来需求要求作出相关数据统计,不想使用BI这类的强大东西,所以搜索到 了免费的开源的Zedgraph控件。使用起来也非常方便,生成的效果可以说是五花八门,千姿百态。废话少说,先看看俺生成的样子.

图1:
按此在新窗口打开图片

图2:

按此在新窗口打开图片

图3:

按此在新窗口打开图片


这 些根据俺的需求与相关统计数据,与Gridview结合起来绘制出来的图,而从此控件的官方网站中,我们还可以看到zgraph不仅能在WebForm中 实现图表功能,在WinForm中同样可以实现,我在这里就只介绍一下WebForm的使用了。(而对应WinForm的使用,官方的Wiki里有很好的 example有VB的啊,有C#的啊,这里就不用啰嗦了)

图4:
按此在新窗口打开图片


网 上在介绍Zedgraph在webForm中使用的大多数是根据Zedgraph自身所带的数据实现,没有与Net的相关数据控件进行结合,我在这里就根 据自己在project中所使用的gridview与Zedgraph使用的心得,与大家一起分享一下.同时欢迎大家多多指教,指正错误。

Step1:下载Zgraph控件 

Zgraph控件现在已经出到5.0.10版本了,分WinForm版和WebForm两种版本,你可以直接到官方下载,也可以在我这下载哈

本站下载地址:http://www.dezai.cn/lesson_info.asp?SoftID=71  (俺可是好人,不会放虫在里面)

官方下载地址:http://sourceforge.net/project/showfiles.php?group_id=114675


Step2:在Project中引用控件

一般情况下,此控件应该是使用在表现层(UI层),所以你可以直接在你的UI层直接引用,当然,为了你方便使用,你可以先把他加到控件箱里头(ToolBox)

方法: 对着控件箱右键点击->选择Choose Item -> 浏览 ->找到你下载的控件-> 选择 就可以了

这样你就可以在控件箱里看到ZedGraph的图标了,你就可以像其它控件一样使用拖拽了

按此在新窗口打开图片


按此在新窗口打开图片

上面说了这么多废话都是前奏,我们还没开始真正使用。


Step3:设置属性

先把控件拖拉到页面中或用户控件中,ZedGraph的属性很多,我这里只说明一下常用的几个属性哈,其实大多数是默认的就OK的,大多数都是对图表的外表进行相关设置,如果你想做出非常精美的图表,那就要对这些属性下一番功夫了。


ID:控件ID
BarBase: 设计图表的基准轴,默认为X
BarType:图表的类型(饼图,柱状图,曲线图等等)
Title:图表标题
OutPutFormat:输出的图表文件类型(Png,Gif,Jpeg,Ico)
width:图表宽度
height:图表高度
ChartFill: 图表背景直充(俺根据字面理解,可能不太准确)
ChartBoder: 设计图表边框样式
lineType:线条类型
...... ....... 
(老实说,我一般在提供的属性里面只是去整宽度跟高度,其它的就很少动了)


Step4:引用控件

这几个东西,你就不要丢了,记得搞上去

using ZedGraph;
using ZedGraph.Web;
using System.Drawing;
using System.Drawing.Imaging;


Step5:初始化


不管你在页面中(aspx)直接使用,还是在用户控件中(ascx),均要对ZedGraph进行初始化操作,其实很简单,你就把下面这段COPY就到你的CS里面就可以了

 private void InitializeComponent()
    {
        this.ZedGraphWeb1.RenderGraph += new ZedGraph.Web.ZedGraphWebControlEventHandler(this.OnRenderGraph);//注册事件
        this.Load += new System.EventHandler(this.Page_Load);

    }


注意:这只是放置一张ZedGraph中生成的图片,那假如是放两个呢?两个就要加一个喔

   private void InitializeComponent()
    {
         this.ZedGraphWeb1.RenderGraph += new ZedGraph.Web.ZedGraphWebControlEventHandler(this.OnRenderGraph1);//注册事件
        this.ZedGraphWeb2.RenderGraph += new ZedGraph.Web.ZedGraphWebControlEventHandler(this.OnRenderGraph2);//注册事件
        this.Load += new System.EventHandler(this.Page_Load);

    }

当你COPY了这段代码后,还要记得在page_load()中加载

protected void Page_Load(object sender, EventArgs e)
    {
        

        InitializeComponent();

    }

Step6:绑定数据

之 前在网上找到的相关教程中90%是采用官主提供的默认数组数据绑定的,最好的绑定接口是IList,由于我这没必要用我就没去研究哈,有兴趣的兄弟们可去 去试一下,ZedGraph绑定的数据源可以是很多,起初我以为只能绑定DataSet,但后面还是可以绑定DataReader的,不仅如此,数组就更 不在话下了。我这里只用DataReader,不过话说回来,所呈现的数据都是以数组整的

6.1 数据源绑定,这个就不用多说了

我在前台加了一个GridVidw,其Gridview的数据源是一个dataReader

 protected void Show()
    {
        this.gdvEduList.DataSource = FeedBackInfoDataCount.EduDataCount();
        gdvEduList.DataBind();
    }


记得在page_load()加载,那么我们的page_load就这样的啦

 protected void Page_Load(object sender, EventArgs e)
    {
        Show();

        InitializeComponent();
    }

6.2设定图表数组绑定

这个就是核心代码了

 private void OnRenderGraph(ZedGraphWeb zgw, Graphics g, MasterPane masterPane)
    {
        GraphPane myPane = masterPane[0];

        myPane.Title.Text = "消费者学历统计";  //设计图表的标题
        myPane.XAxis.Title.Text = "学历类型"; //X轴标题
        myPane.YAxis.Title.Text = "人数"; //Y轴标题

        PointPairList list = new PointPairList(); //初始化一个PointPariList对象,说白了就是一条曲线或一条柱子要生出来了

        //PointPairList list2 = new PointPairList();  如果你要在一个图表城显示多条曲线或柱子你就可以增加一个PointPariList对像,相对应下面的 y2,List2也是这个List相关的东西了

        //PointPairList list3 = new PointPairList(); //原理同上


        for (int x = 0; x & lt; this.gdvEduList.Rows.Count; x++) //循环,x的初始值为0,最终值是我数据源中的记录总数 这里主要是 gdvEdulist.Rows.Count的设定,根据你的数据源来设定
        {

            int careerCount = Convert.ToInt32(this.gdvEduList.Rows[x].Cells[1].Text.Trim()); 这 个是获取所对应的每条柱子所对应的数据的文本,我是从gridvew中直接取到的

            

            int y = careerCount;//这句就是要充的值了,将CareerCount的值都整到Y里面去了,其实你也可以直接将值赋予Y,注意,这里的Y应该代表Y轴

            //double y2 = rand.NextDouble() * 300;
            //double y3 = rand.NextDouble() * 300;

            list.Add(x, y); // 将XY的值整到list里面存储起来


            //list2.Add(x, y2);
            //list3.Add(x, y3);
        }

        BarItem myCurve = myPane.AddBar("数据统计", list, Color.Green); //增加一个Bar,List里面是不是包含了(X,Y)

        myCurve.Bar.Fill = new Fill(Color.Green, Color.Green, Color.Green); //将颜色直译


        //BarItem myCurve2 = myPane.AddBar("续费", list2, Color.Red);
        //myCurve2.Bar.Fill = new Fill(Color.Red, Color.White, Color.Red);
        //BarItem myCurve3 = myPane.AddBar("升级", list3, Color.Green);
        //myCurve3.Bar.Fill = new Fill(Color.Green, Color.White, Color.Green);

        myPane.XAxis.MajorTic.IsBetweenLabels = true; //这个我不知道乍么解释,不好意思

        string[] labels = new string[gdvEduList.Rows.Count];  

        for (int i &#61; 0; i < this.gdvEduList.Rows.Count; i&#43;&#43;)  //这个循环主要是取到里面的说明文字&#xff0c;用了一个数组的方法
        {
           

            labels[i] &#61; this.gdvEduList.Rows[i].Cells[0].Text.Trim();

        }


   //以下这些是无关痛庠的属性设置了&#xff0c;一般默认就可以

        myPane.XAxis.Scale.TextLabels &#61; labels; 

        myPane.XAxis.Type &#61; AxisType.Text;

        myPane.Fill &#61; new Fill(Color.White, Color.FromArgb(200, 200, 255), 45.0f);

        myPane.Chart.Fill &#61; new Fill(Color.White, Color.White, 45.0f);


        masterPane.AxisChange(g); //这句话不可少


    }

当你整完上页这段后&#xff0c;你就可以得到下面这个东西了

按此在新窗口打开图片


我想大家应该大至明白乍样用这东西了吧。

发个源码包&#xff1a;点击下载此文件


上面这个是一个柱子的生成图&#xff0c;那其它图呢&#xff1f;

我只把主要代码丢出来给大家哈&#xff0c;有错你就要说给我听哈&#xff0c;不要我会贬你的哈

饼图&#xff1a;

点击下载此文件

多条柱子的&#xff1a;


点击下载此文件

WebZedGraphDemo

点击下载此文件



其实WinForm的跟WebForm的用法差不多&#xff0c;大家只要认真比较一下&#xff0c;就很容易从官方的example里面的提供的在WinForm的使用转成WebForm的啦&#xff0c;俺们一起努力吧.


相关IT同仁的学习文章&#xff0c;大家都可以看看哈


ZedGraph Wiki:

http://zedgraph.org/wiki/index.php?title&#61;Main_Page

&#xff08;codeproject.com)   http://www.codeproject.com/csharp/ZedGraph.asp 

 ZedGraph 总论(WinForm篇)http://blog.csdn.net/tjvictor/archive/2006/11/24/1412550.aspx

ZedGraph在Asp.net中的应用 http://tech.it168.com/n/2007-06-13/200706131521812.shtml

ZedGraph在Asp.net中的应用(2) http://www.cnblogs.com/wxukie/archive/2007/05/16/748922.html

 

转:https://www.cnblogs.com/AdaLoong/p/5625145.html



推荐阅读
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
  • CSS3 @font-face 字体应用技术解析与实践
    在Web前端开发中,HTML教程和CSS3的结合使得网页设计更加多样化。长期以来,Web设计师受限于“web-safe”字体的选择。然而,CSS3中的`@font-face`规则允许从服务器端加载自定义字体,极大地丰富了网页的视觉效果。通过这一技术,设计师可以自由选择和使用各种字体,提升用户体验和页面美观度。本文将深入解析`@font-face`的实现原理,并提供实际应用案例,帮助开发者更好地掌握这一强大工具。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • 本文介绍了如何使用 CMD 批处理脚本进行文件操作,包括将指定目录下的 PHP 文件重命名为 HTML 文件,并将这些文件复制到另一个目录。 ... [详细]
  • 本文详细介绍了如何在 Django 项目中使用 Admin 管理后台,包括创建超级用户、启动项目、管理数据模型和修改用户密码等步骤。 ... [详细]
  • 在 iOS 开发中,内存管理是一个至关重要的环节。初学者常常因为内存管理不当导致程序崩溃。本文将详细介绍 iOS 中内存的分配与释放机制,并提供一些实用的技巧。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 在C#开发中,实现UserControls之间高效传递CheckBox值是一个常见的需求。本文详细介绍了如何通过事件和委托机制,将UserControl3中的CheckBox值传递到UserControl1中,确保数据传递的准确性和实时性。此外,还提供了代码示例和最佳实践,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • Objective-C 中的委托模式详解与应用 ... [详细]
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
  • JavaScript XML操作实用工具类:XmlUtilsJS技巧与应用 ... [详细]
author-avatar
mobiledu2502937927
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有