版權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 寶寶皮膚護理與預防濕疹
- 2025 小學一年級道德與法治上冊獨自在家不害怕課件
- 遠程會診護理的經(jīng)濟效益
- 臨潭事業(yè)編招聘2022年考試模擬試題及答案解析42
- 職業(yè)健康檔案電子化傳輸過程中的加密技術(shù)應用
- 銅仁2025年貴州銅仁市沿河縣消防救援大隊招錄政府專職消防員24人筆試歷年參考題庫附帶答案詳解
- 衢州2025年浙江衢州常山縣衛(wèi)健系統(tǒng)事業(yè)單位招考編外工作人員39人筆試歷年參考題庫附帶答案詳解
- 綿陽四川綿陽市公安局招聘警務(wù)輔助人員76人筆試歷年參考題庫附帶答案詳解
- 濰坊2025年山東濰坊濱海區(qū)招聘城市社區(qū)專職工作人員79人筆試歷年參考題庫附帶答案詳解
- 河北2025年河北工藝美術(shù)職業(yè)學院選聘5人筆試歷年參考題庫附帶答案詳解
- 藥物警戒基礎(chǔ)知識全員培訓
- 骨密度檢測的臨床意義
- 鉆探原始班報表試行版
- 腸菌移植治療炎癥性腸病專家共識(2025)解讀
- T/CPPC 1032-2021建筑生產(chǎn)資源分供商評價規(guī)范
- 機耕合同協(xié)議書范本簡單
- 送車免責合同協(xié)議書模板
- 外科學重癥監(jiān)測治療與復蘇
- 瓊脂糖-纖維素復合分離介質(zhì)
- 早產(chǎn)兒家庭參與式護理
- 2025年招商引資項目可行性研究報告范文
評論
0/150
提交評論