GridView+ZedGraph【转】
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?=?0;?i?<?this.gdvEduList.Rows.Count;?i++)??//這個循環主要是取到里面的說明文字,用了一個數組的方法
????????{
???????????
????????????labels[i]?=?this.gdvEduList.Rows[i].Cells[0].Text.Trim();
????????}
???//以下這些是無關痛庠的屬性設置了,一般默認就可以
????????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.White,?45.0f);
????????masterPane.AxisChange(g);?//這句話不可少
????}
當你整完上頁這段后,你就可以得到下面這個東西了
我想大家應該大至明白乍樣用這東西了吧。
發個源碼包:點擊下載此文件
上面這個是一個柱子的生成圖,那其它圖呢?
我只把主要代碼丟出來給大家哈,有錯你就要說給我聽哈,不要我會貶你的哈
餅圖:
點擊下載此文件
多條柱子的:
點擊下載此文件
WebZedGraphDemo
點擊下載此文件
其實WinForm的跟WebForm的用法差不多,大家只要認真比較一下,就很容易從官方的example里面的提供的在WinForm的使用轉成WebForm的啦,俺們一起努力吧.
相關IT同仁的學習文章,大家都可以看看哈
ZedGraph?Wiki:
http://zedgraph.org/wiki/index.php?title=Main_Page
(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
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的GridView+ZedGraph【转】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于OSSIM的漏洞***测试视频教程
- 下一篇: 征信报告怎么看