WinForm使用DecExpress控件中的ChartControl插件繪制圖表_第1頁
WinForm使用DecExpress控件中的ChartControl插件繪制圖表_第2頁
WinForm使用DecExpress控件中的ChartControl插件繪制圖表_第3頁
WinForm使用DecExpress控件中的ChartControl插件繪制圖表_第4頁
WinForm使用DecExpress控件中的ChartControl插件繪制圖表_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第WinForm使用DecExpress控件中的ChartControl插件繪制圖表目錄1.繪制圖表基本步驟準備數(shù)據(jù)并綁定根據(jù)數(shù)據(jù)創(chuàng)建圖形展現(xiàn)根據(jù)圖形對象創(chuàng)建一個圖表并綁定到CharControl中調(diào)用函數(shù)繪制圖表2.柱狀圖準備數(shù)據(jù)創(chuàng)建圖形展現(xiàn)對象方法根據(jù)圖形對象創(chuàng)建圖表3.餅狀圖準備數(shù)據(jù)創(chuàng)建一個餅狀圖設(shè)置餅狀圖顯示方式(數(shù)值/百分比)最近因為公司項目需要用到WinForm的DecExpress控件,在這里把一些使用方法總結(jié)一下。

DevExpress中有一個專門用來繪制圖表的插件ChartControl,可以繪制折線圖、餅狀圖、柱狀圖等圖表。

1.繪制圖表基本步驟

準備數(shù)據(jù)并綁定

這里從數(shù)據(jù)庫中取得數(shù)據(jù),可以根據(jù)自己的需要修改。

DataTabledtData=BFbll_ep_collection_data.Instance.GetDataTable(sqlwhere,"data_time",parameters);

//建立新的datatable,用來存儲XY坐標

DataTabledtXY=newDataTable();

//橫坐標的值

dtXY.Columns.Add(newDataColumn("類型"));

varlist=newListobject

//縱坐標的值

list.Add("數(shù)值");

//這里是控制x軸顯示數(shù)據(jù)的數(shù)量,ArgumentScaleType類型設(shè)置為ScaleType.Qualitative時他不會自動控制x軸的數(shù)量

//如果得到數(shù)據(jù)小于X_COUNT,則x軸顯示全部得到的數(shù)據(jù)

if(X_COUNTdtData.Rows.Count)

for(inti=0;iX_COUNT;i++)

intindex=(dtData.Rows.Count/X_COUNT)*i;

DataRowitem=dtData.Rows[index];

dtXY.Columns.Add(newDataColumn(item["data_time"].ToString(),typeof(decimal)));

list.Add(item["value"]);

//如果得到數(shù)據(jù)大于X_COUNT,則x軸X_COUNT條數(shù)據(jù)

for(inti=0;idtData.Rows.Count;i++)

DataRowitem=dtData.Rows[i];

dtXY.Columns.Add(newDataColumn(item["data_time"].ToString(),typeof(decimal)));

list.Add(item["value"]);

vararray=list.ToArray();

dtXY.Rows.Add(array);

this.chartControl1.DataSource=dtXY;

一個更直白的例子:

DataTabledt=newDataTable();

dt.Columns.Add(newDataColumn("類型"));

dt.Columns.Add(newDataColumn("2005-1月",typeof(decimal)));

dt.Columns.Add(newDataColumn("2005-2月",typeof(decimal)));

dt.Columns.Add(newDataColumn("2005-3月",typeof(decimal)));

dt.Columns.Add(newDataColumn("2005-4月",typeof(decimal)));

dt.Columns.Add(newDataColumn("2005-5月",typeof(decimal)));

dt.Columns.Add(newDataColumn("2005-6月",typeof(decimal)));

dt.Rows.Add(newobject[]{"員工人數(shù)",437,437,414,397,387,378});

dt.Rows.Add(newobject[]{"人均月薪",3964,3961,3979,3974,3967,3972});

dt.Rows.Add(newobject[]{"成本TEU",3104,1339,3595.8,3154.5,2499.8,3026});

dt.Rows.Add(newobject[]{"人均生產(chǎn)率",7.1,3.06,8.69,7.95,6.46,8.01});

dt.Rows.Add(newobject[]{"占2005年3月人數(shù)比例",1.06,1.06,1,0.96,0.93,0.91});

根據(jù)數(shù)據(jù)創(chuàng)建圖形展現(xiàn)

CreateSeries用于創(chuàng)建一個典型的圖形,這里展示創(chuàng)建一條曲線。

///summary

///根據(jù)數(shù)據(jù)創(chuàng)建一個圖形展現(xiàn)

////summary

///paramname="caption"圖形標題/param

///paramname="viewType"圖形類型/param

///paramname="dt"數(shù)據(jù)DataTable/param

///paramname="rowIndex"圖形數(shù)據(jù)的行序號/param

///returns/returns

privateSeriesCreateSeries(stringcaption,ViewTypeviewType,DataTabledt,introwIndex)

Seriesseries=newSeries(caption,viewType);

for(inti=1;idt.Columns.Count;i++)

stringargument=dt.Columns[i].ColumnName;//參數(shù)名稱

decimalvalue=(decimal)dt.Rows[rowIndex][i];//參數(shù)值

series.Points.Add(newSeriesPoint(argument,value));

//必須設(shè)置ArgumentScaleType的類型,否則顯示會轉(zhuǎn)換為日期格式,導致不是希望的格式顯示

//也就是說,顯示字符串的參數(shù),必須設(shè)置類型為ScaleType.Qualitative

series.ArgumentScaleType=ScaleType.Qualitative;

//series.ArgumentScaleType=ScaleType.DateTime;

series.LabelsVisibility=DevExpress.Utils.DefaultBoolean.False;//顯示標注標簽

returnseries;

}

根據(jù)圖形對象創(chuàng)建一個圖表并綁定到CharControl中

///summary

///根據(jù)圖形對象創(chuàng)建一個圖表

////summary

///paramname="chartControl"圖表綁定控件/param

///paramname="list"圖表中的圖形展現(xiàn)/param

///returns/returns

privatevoidCreateChart(ChartControlchartControl,ListSerieslist)

chartControl.Series.AddRange(list.ToArray());

chartControl.Legend.Visible=false;

chartControl.SeriesTemplate.LabelsVisibility=DefaultBoolean.False;

//XYDiagramdiagram=(XYDiagram)chartControl1.Diagram;

//diagram.AxisX.DateTimeMeasureUnit=DateTimeMeasurementUnit.Second;

//diagram.AxisX.DateTimeOptions.Format=DateTimeFormat.Custom;

//diagram.AxisX.DateTimeOptions.FormatString="yyyy-MM-ddHH:mm:ss";

}

調(diào)用函數(shù)繪制圖表

//清空ChartControl控件

chartControl1.Series.Clear();

//創(chuàng)建圖形對象的列表

ListSerieslist=newListSeries

foreach(DataRowViewiteminlistBox.Items)

stringstr=item["key"].ToString();

//通過LoadData返回一個DataTable

DataTabledtXY=LoadData(str);

//創(chuàng)建一個圖形對象

Seriesseries=CreateSeries(caption,type,dtXY,0);;

list.Add(series);

//根據(jù)圖形對象列表創(chuàng)建一個圖表

CreateChart(chartControl1,list);

小結(jié):在繪制折線圖的時候我遇到的一個很大的問題就是沒辦法控制數(shù)據(jù)的顯示數(shù)量,因為數(shù)據(jù)庫中存儲的數(shù)據(jù)量過大,在一定時間段內(nèi)的數(shù)據(jù)都能達到上千條,所以不可能一次性全部顯示。我想到的解決辦法是固定顯示多少條數(shù)據(jù),比如說20條,然后根據(jù)數(shù)據(jù)量每隔一段距離取一條數(shù)據(jù)顯示。

2.柱狀圖

繪制柱狀圖其實和繪制折線圖沒有什么區(qū)別,就是將newSeries時的圖形類型改為ViewType.Bar即可,這里我想總結(jié)一下一個困擾我很久的問題,如何繪制上圖所示的一個橫坐標對應兩個或者多個柱子。

準備數(shù)據(jù)

DataTabledtData=SqlHelper.GetDataSet(sql,parameters).Tables[0];

//建立新的datatable,用來存儲XY坐標

DataTabledtXY_max=newDataTable();

DataTabledtXY_min=newDataTable();

dtXY_max.Columns.Add(newDataColumn("類型"));

dtXY_min.Columns.Add(newDataColumn("類型"));

varlist_max=newListobject

list_max.Add("數(shù)值");

varlist_min=newListobject

list_min.Add("數(shù)值");

for(inti=0;idtData.Rows.Count;i++)

DataRowitem=dtData.Rows[i];

stringvalue=item["max"].ToString()+"|"+item["min"].ToString();

//dtXY.Columns.Add(newDataColumn(item["data_time"].ToString(),typeof(string)));

//list.Add(value);

dtXY_max.Columns.Add(newDataColumn(item["data_time"].ToString(),typeof(decimal)));

list_max.Add(item["max"]);

dtXY_min.Columns.Add(newDataColumn(item["data_time"].ToString(),typeof(decimal)));

list_min.Add(item["min"]);

vararray_max=list_max.ToArray();

dtXY_max.Rows.Add(array_max);

vararray_min=list_min.ToArray();

dtXY_min.Rows.Add(array_min);

創(chuàng)建圖形展現(xiàn)對象方法

///summary

///根據(jù)數(shù)據(jù)創(chuàng)建一個圖形展現(xiàn)

////summary

///paramname="caption"圖形標題/param

///paramname="viewType"圖形類型/param

///paramname="dt"數(shù)據(jù)DataTable/param

///paramname="rowIndex"圖形數(shù)據(jù)的行序號/param

///returns/returns

privateSeriesCreateSeries(stringcaption,ViewTypeviewType,DataTabledt,introwIndex)

Seriesseries=newSeries(caption,viewType);

for(inti=1;idt.Columns.Count;i++)

stringargument=dt.Columns[i].ColumnName;//參數(shù)名稱

decimalvalue=(decimal)dt.Rows[rowIndex][i];

series.Points.Add(newSeriesPoint(argument,value));

//柱狀圖柱子的寬度設(shè)置

//BarSeriesViewbsv=(BarSeriesView)series.View;

//bsv.BarWidth=0.1;

//必須設(shè)置ArgumentScaleType的類型,否則顯示會轉(zhuǎn)換為日期格式,導致不是希望的格式顯示

//也就是說,顯示字符串的參數(shù),必須設(shè)置類型為ScaleType.Qualitative

series.ArgumentScaleType=ScaleType.Qualitative;

//series.ArgumentScaleType=ScaleType.DateTime;

series.LabelsVisibility=DevExpress.Utils.DefaultBoolean.True;//顯示標注標簽

returnseries;

}

根據(jù)圖形對象創(chuàng)建圖表

///summary

///根據(jù)圖形對象創(chuàng)建一個圖表

////summary

///paramname="chartControl"圖標綁定控件/param

///paramname="list"圖表中的圖形展現(xiàn)/param

///returns/returns

privatevoidCreateChart(ChartControlchartControl,ListSeriesseries)

chartControl.Series.AddRange(series.ToArray());

//chartControl.Series.Add(series);

chartControl.Legend.Visible=true;

chartControl.SeriesTemplate.LabelsVisibility=DefaultBoolean.True;

XYDiagramxydiagram=(XYDiagram)chartControl.Diagram;

xydiagram.AxisX.MinorCount=10;

}

3.餅狀圖

privateDataTableCreateChartData()

DataTabledtData=SqlHelper.GetDataSet(sql,parameters).Tables[0];

DataTabletable=newDataTable("Table1");

table.Columns.Add("Name",typeof(String));

table.Columns.Add("Value",typeof(Double));

foreach(DataRowitemindtData.Rows)

vararray=newobject[]{item["value_num"],item["count"]};

table.Rows.Add(array);

returntable;

}

創(chuàng)建一個餅狀圖

///summary

///根據(jù)數(shù)據(jù)創(chuàng)建一個餅狀圖

////summary

///returns/returns

privatevoidBuilderDevChart()

Series_pieSeries=newSeries("測試",ViewType.Pie);

_pieSeries.ValueDataMembers[0]="Value";

_pieSeries.ArgumentDataMember="Name";

_pieSeries.DataSource=CreateChartData();

chartControl1.Series.Add(_pieSeries);

_pieSeries.SetPiePercentage();

_pieSeries.LegendPointOptions.PointView=PointView.ArgumentAndValues;

}

設(shè)置餅狀圖顯示

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論