DevExpress中使用ChartControl绘制折线图和导出图表为Excel文件
一、实现效果
①手动创建线性图表(添加图表标题)
②绘制单条线性图(可实现设置X和Y轴名称、绑定数据、缩放、复选框勾选是否显示、查看指定点信息)
③绘制多条线性图可实现设置X和Y轴名称、绑定数据、缩放、复选框勾选是否显示、查看指定点信息)
④导出图表为Excel
二、了解认识CharControl控件
可以先手动拖拽一个ChartControl到窗体查看设计效果,了解图表
点击图表右上角的小三角图标进行设计
三、实现步骤
3.1、编写线性图表的基础内容
#region 图表基础/// <summary>/// 创建图表/// </summary>/// <param name="titleName">图表的标题名称</param>/// <param name="chartControlName">图表的名称</param>/// <param name="initLocation">图表的初始位置</param>/// <param name="InitSize">图表的初始大小</param>/// <returns></returns>private ChartControl CreateChart(string titleName,string chartControlName, System.Drawing.Point initLocation, System.Drawing.Size InitSize){ChartControl chartControl = new ChartControl();chartControl.Legend.Name = "Default Legend";chartControl.Location = initLocation;chartControl.Name = chartControlName;chartControl.Size = InitSize;chartControl.SeriesSerializable = new DevExpress.XtraCharts.Series[0];//添加标题if (chartControl.Titles.Count < 1){chartControl.Titles.Add(new ChartTitle());chartControl.Titles[0].Text = titleName;}Controls.Add(chartControl);chartControl.Show();return chartControl;}/// <summary>/// 清空图表/// </summary>/// <param name="chartControl">图表</param>private void ClearChart(ChartControl chartControl){if (chartControl != null){this.Controls.Remove(chartControl);chartControl = null;chartControl?.Dispose();}}/// <summary>/// 填充数据到线性图表/// </summary>/// <param name="seriesName">图例类型名称</param>/// <param name="curSeriesAllDataDic">图例类型对应的所有数据</param>/// <param name="chartControl">线性图表</param>/// <param name="viewType">线性图表类型</param>private void FillDataToLineChart(string seriesName,Dictionary<string, double> curSeriesAllDataDic,ChartControl chartControl, ViewType viewType = ViewType.Line){if (chartControl == null ||curSeriesAllDataDic == null && curSeriesAllDataDic.Count == 0) return;//添加一个类型的数据Series series = new Series(seriesName, viewType);foreach (var item in curSeriesAllDataDic){series.Points.Add(new SeriesPoint(item.Key, item.Value));}chartControl.Series.Add(series);//图例的样式设置((LineSeriesView)series.View).MarkerVisibility = DevExpress.Utils.DefaultBoolean.True;((LineSeriesView)series.View).LineMarkerOptions.Kind = MarkerKind.Circle;((LineSeriesView)series.View).LineStyle.DashStyle = DashStyle.Solid;}/// <summary>/// 图表设置/// </summary>/// <param name="chartControl">chartControl图表</param>/// <param name="axisXName">X轴名称</param>/// <param name="axisYName">Y轴名称</param>private void ChartSettings(ChartControl chartControl, string axisXName, string axisYName){//显示图例复选框chartControl.Legend.MarkerMode = DevExpress.XtraCharts.LegendMarkerMode.CheckBoxAndMarker;XYDiagram diagram = (XYDiagram)chartControl.Diagram;if (diagram!=null){//允许缩放X轴diagram.EnableAxisXZooming = true;diagram.AxisX.Title.Visibility = DevExpress.Utils.DefaultBoolean.True;diagram.AxisX.Title.Alignment = StringAlignment.Far;diagram.AxisX.Title.Text = axisXName;//要开启滚动条需设置自动范围为falsediagram.AxisX.VisualRange.Auto = false;//启用X轴滚动条diagram.EnableAxisXScrolling = true;在不拉动滚动条的时候,X轴显示的数据个数(固定X轴的长度)//diagram.AxisX.WholeRange.SetMinMaxValues("2021/08/01", "2021/08/07");// Define the whole range for the Y-axis. diagram.AxisY.WholeRange.Auto = false;diagram.AxisY.WholeRange.SetMinMaxValues(10, 70);//允许缩放Y轴diagram.EnableAxisYZooming = true;diagram.AxisY.Title.Visibility = DevExpress.Utils.DefaultBoolean.True;diagram.AxisY.Title.Alignment = StringAlignment.Far;diagram.AxisY.Title.Text = axisYName;//chartControl.CrosshairOptions.ShowArgumentLabels = true;//chartControl.CrosshairOptions.ShowValueLine = true;}}//初始化图表private void InitChartSettings(ChartControl chartControl, string axisXName, string axisYName){XYDiagram diagram = (XYDiagram)chartControl.Diagram;if (diagram != null){//允许缩放X轴diagram.EnableAxisXZooming = true;diagram.AxisX.Title.Visibility = DevExpress.Utils.DefaultBoolean.True;diagram.AxisX.Title.Alignment = StringAlignment.Far;diagram.AxisX.Title.Text = axisXName;//要开启滚动条需设置自动范围为falsediagram.AxisX.VisualRange.Auto = false;//启用X轴滚动条diagram.EnableAxisXScrolling = true;//在不拉动滚动条的时候,X轴显示的数据个数(固定X轴的长度)diagram.AxisX.WholeRange.SetMinMaxValues(Convert.ToDateTime("2021/08/01"), Convert.ToDateTime("2021/08/07"));// Define the whole range for the Y-axis. diagram.AxisY.WholeRange.Auto = false;diagram.AxisY.WholeRange.SetMinMaxValues(10, 70);//允许缩放Y轴diagram.EnableAxisYZooming = true;diagram.AxisY.Title.Visibility = DevExpress.Utils.DefaultBoolean.True;diagram.AxisY.Title.Alignment = StringAlignment.Far;diagram.AxisY.Title.Text = axisYName;//chartControl.CrosshairOptions.ShowArgumentLabels = true;//chartControl.CrosshairOptions.ShowValueLine = true;}}#endregion
3.2、线性图表【单线】创建
//创建线性图表【单线】private void simpleButton1_Click(object sender, EventArgs e){//0-清空图表ClearChart(chartControl1);//1-创建图表chartControl1=CreateChart("线性图表","LineChart",new Point(10,12),new Size(600,360));/*2-填充数据到图表*///模拟数据Dictionary<string,Dictionary<string, double>> needFillDataDic = new Dictionary<string, Dictionary<string, double>>();Dictionary<string, double> tmpADic = new Dictionary<string, double>();tmpADic.Add("2021/08/01", 36.5);tmpADic.Add("2021/08/02", 22.3);tmpADic.Add("2021/08/03", 21.1);tmpADic.Add("2021/08/04", 25.8);tmpADic.Add("2021/08/05", 32.3);tmpADic.Add("2021/08/06", 42.0);tmpADic.Add("2021/08/07", 35.5);needFillDataDic.Add("类型A", tmpADic);//填充数据if (needFillDataDic!=null && needFillDataDic.Count>0){foreach (var item in needFillDataDic){string seriesName = item.Key;Dictionary<string, double> curSeriesDataDic = item.Value;FillDataToLineChart(seriesName, curSeriesDataDic, chartControl1);}}//3-图表设置ChartSettings(chartControl1, "日期", "数值(单位:个)");}
3.3、线性图表【多线】创建
//创建线性图表【多线】private void simpleButton2_Click(object sender, EventArgs e){//0-清空图表ClearChart(chartControl1);//1-创建图表chartControl1 = CreateChart("线性图表", "LineChart", new Point(10, 12), new Size(600, 360));/*2-填充数据到图表*///模拟数据Dictionary<string, Dictionary<string, double>> needFillDataDic =new Dictionary<string, Dictionary<string, double>>();Dictionary<string, double> tmpADic = new Dictionary<string, double>();tmpADic.Add("2021/08/01", 36.5);tmpADic.Add("2021/08/02", 22.3);tmpADic.Add("2021/08/03", 21.1);tmpADic.Add("2021/08/04", 25.8);tmpADic.Add("2021/08/05", 32.3);tmpADic.Add("2021/08/06", 42.0);tmpADic.Add("2021/08/07", 35.5);needFillDataDic.Add("类型A", tmpADic);Dictionary<string, double> tmpBDic = new Dictionary<string, double>();tmpBDic.Add("2021/08/01", 66.5);tmpBDic.Add("2021/08/02", 51.2);tmpBDic.Add("2021/08/03", 44.6);tmpBDic.Add("2021/08/04", 35.8);tmpBDic.Add("2021/08/05", 42.3);tmpBDic.Add("2021/08/06", 32.0);tmpBDic.Add("2021/08/07", 55.5);needFillDataDic.Add("类型B", tmpBDic);//填充数据if (needFillDataDic != null && needFillDataDic.Count > 0){foreach (var item in needFillDataDic){string seriesName = item.Key;Dictionary<string, double> curSeriesDataDic = item.Value;FillDataToLineChart(seriesName, curSeriesDataDic, chartControl1);}}//3-图表设置ChartSettings(chartControl1, "日期", "数值(单位:个)");}
3.4、导出图表为Excel
#region 导出图表/// <summary>/// 导出图表为Excel文件/// </summary>/// <param name="chartControl">chartControl组件</param>public static void ExportDatasToExcelFile(ChartControl chartControl){if (chartControl==null){MessageBox.Show("图表为空!导出失败", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}SaveFileDialog saveFileDialog = new SaveFileDialog();saveFileDialog.Title = "导出Excel";saveFileDialog.Filter = "Excel文件(*.xls)|*.xls|Excel文件(*.xlsx)|*.xlsx";if (saveFileDialog.ShowDialog() == DialogResult.OK){string filter = saveFileDialog.FileName.Substring(saveFileDialog.FileName.LastIndexOf(".") + 1);if (filter == "xls"){XlsExportOptions options = new XlsExportOptions();options.TextExportMode = TextExportMode.Value;options.ExportMode = XlsExportMode.SingleFile;chartControl.ExportToXls(saveFileDialog.FileName, options);}else{XlsxExportOptions options = new XlsxExportOptions();options.TextExportMode = TextExportMode.Value;options.ExportMode = XlsxExportMode.SingleFile;chartControl.ExportToXlsx(saveFileDialog.FileName, options);}MessageBox.Show("导出成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);if (MessageBox.Show("保存成功,是否打开文件?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes){System.Diagnostics.Process.Start(saveFileDialog.FileName);}}}#endregion
四、官网参考资料
①官网线性图表示例
②官网手册
③官网ChartControl
④AxisBase.Range Property | Cross-Platform Class Library | DevExpress Documentation
五、其他参考资料
①DevExpress 折线图和柱状图的绘制与数据绑定
②DEV控件之ChartControl 属性设置
③Dev中ChartControl添加限定线
④Dev中ChartControl——属性熟悉与简单应用
DevExpress中使用ChartControl绘制折线图和导出图表为Excel文件相关推荐
- pyecharts绘制折线图
要使用Python中的pyecharts绘制折线图,首先需要安装pyecharts库(可以使用pip install pyecharts命令进行安装).然后可以按照以下步骤进行绘图: 导入pyecha ...
- 「解析」Matplotlib 绘制折线图
相比于[优雅]matplotlib 常见图.[优雅]matplotlib 3D图 而言,折线图使用的频率会更高一些,在此整理下最近使用 Matplotlib 绘制折线图常用的一些配置,小伙伴们只需要修 ...
- 使用matplotlib绘制折线图(绘制一天当中的气温变化)
matplotlib绘制折线图 一.使用matplotlib绘制一天当中的气温变化 1.假设一天当中每隔两个小时(range(2,26,2))的气温分别是[15,13,14.5,17,20,25,26 ...
- python matplotlib 绘制二维数据中某些列到折线图,没有线的解决方法
results.txt中的文本数据是这样的. { "epoch":0, "imgindex":0, "imgcount":63, " ...
- 使用python读取excel中的数据,并绘制折线图
使用python读取excel中的数据,并绘制折线图 做实验的时候采集到一些数据,从文本拷贝到excel,然后从十六进制转换成十进制.图表是分析数据的有利工具,使用python绘制出的图表简明美观.所 ...
- java利用POI在word中绘制折线图
1.poi的简介 Apache POI 简介是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office(Excel.WORD ...
- Python读取excel文件中的数据,绘制折线图、散点图
https://www.cnblogs.com/liulinghua90/p/9935642.html https://blog.csdn.net/qq_32458499/article/detail ...
- python matplotlib绘制折线图
前言 众所周知,matplotlib 是一款功能强大开源的数据可视化模块,凭借着强大的扩展性构建出更高级别的绘图工具接口如seaborn.ggplot.我们来看看往期学习章节内容概述吧~ 接下来,我们 ...
- Tableau 绘制折线图
手把手教你 Tableau 绘制折线图 折线图是将整个视图中的各个数据点连接起来,通常用于显示数据随着时间变化的趋势,或者预测未来的值. 绘制电影数量变化折线图 数据展示 操作步骤 1.对「上映时间」 ...
- python matplotlib画折线图_python使用matplotlib绘制折线图教程
matplotlib简介 matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序 ...
最新文章
- css浮动+应用(瀑布流效果的实现)
- POJ - 1273 Drainage Ditches(最大流)
- [译]第三章:什么是组织结构
- 【可持久化线段树】【主席树】[HDU4417]Super Mario
- 028-Dell服务器做Raid
- how to clear screen in python shell
- Android Studio中.9.png文件出错问题
- 常见的虚拟化软件及其特点。
- 机器人模型仿真(turtlebot3)
- TP6-------对接腾讯云直播
- 通过命令行玩转Git,需要记住那些命令?
- 关于this.$XXXXXXX
- 多类别分类——吴恩达课程作业python代码实现
- 介绍计算机说明文,介绍电脑的说明文作文300字
- Max-Product Loopy Belief Propagation for Solving MRF's energy function minimization
- CCM5.0 应用实例(SIP X-lite)
- 中暑了,别只知道喝藿香正气水、擦清凉油!这个防暑妙招你得懂
- cpu软改vista 驱动_Windows Vista,连接点并将“我的文档”移动到另一个驱动器。...
- 噪音声压和声功率的区别_声学基础知识(三):声压、声功率和声强的联系与区别-下...
- 现在的美女都不喜欢程序员
热门文章
- 计算机等级考试一级宝典,计算机等级考试一级通关宝典.doc
- 听音扒谱app_识字APP评测!洪恩、熊猫博士、麦田、悟空、叫叫哪个好?
- 解决mysql connection ODBC安装系统代码126错误 VC2013安装
- 开发Connext DDS传输插件不用求人,看这一篇就够了
- 计算机打印不了测试纸,XP打印机打印不了测试页如何解决|打印机打印不了测试页的原因...
- RF(接口自动化测试)
- topjui中datagrid增删改查
- 集装箱装柜计算机器在线,装箱大师在线计算教程
- 搭建MySQL可视化Web界面服务器
- 雷蛇灵刃 15 黑苹果 Hackintosh