public class LineChartHelp
{
#region 折线图
/// <summary>
/// 创建折线图
/// </summary>
public void CreateChart(ChartControl chart, DataTable dt, int j, int k)
{
chart.Series.Clear();//清除Series
List<Series> list = new List<Series>();
list.Add(CreateSeries(dt.Columns[j].ColumnName, ViewType.Line, dt, j));
list.Add(CreateSeries(dt.Columns[j + 1].ColumnName, ViewType.Line, dt, j + 1));
list.Add(CreateSeries(dt.Columns[k].ColumnName, ViewType.Line, dt, k));
list.Add(CreateSeries(dt.Columns[k + 1].ColumnName, ViewType.Line, dt, k + 1));

SetChart(chart, dt, list, true);
}

/// <summary>
/// 创建折线图
/// </summary>
public void CreateChart(ChartControl chart, DataTable dt, int j = 1)
{
#region Series 创建几个图形的对象
chart.Series.Clear();//清除Series
List<Series> list = new List<Series>();
for (int i = j; i < dt.Columns.Count; i++)
{
list.Add(CreateSeries(dt.Columns[i].ColumnName, ViewType.Line, dt, i));
}
#endregion
SetChart(chart, dt, list);
}

private void SetChart(ChartControl chart, DataTable dt, List<Series> list, bool legend = false)
{
chart.Series.AddRange(list.ToArray());
chart.Legend.Visible = false;
chart.SeriesTemplate.LabelsVisibility = DefaultBoolean.True;
SetX(chart);

List<Color> colorList = new List<Color> { Color.Red, Color.YellowGreen, Color.Green, Color.Blue, Color.Tomato, Color.BlueViolet };

if (((XYDiagram)chart.Diagram).SecondaryAxesY != null)//清空y轴
((XYDiagram)chart.Diagram).SecondaryAxesY.Clear();

for (int i = 0; i < list.Count; i++)
{
list[i].View.Color = colorList[i];
if(!legend)
CreateAxisY(chart, list[i]);
}
chart.Legend.Visible = legend;
}

/// <summary>
/// 设置x轴可缩放
/// </summary>
/// <param name="chart1"></param>
private void SetX(ChartControl chart)
{
XYDiagram diagram = (XYDiagram)chart.Diagram;
diagram.EnableAxisXScrolling = true;
diagram.EnableAxisXZooming = true;
}

/// <summary>
/// 根据数据创建一个图形展现
/// </summary>
/// <param name="caption">图形标题</param>
/// <param name="viewType">图形类型</param>
/// <param name="dt">数据DataTable</param>
/// <param name="rowIndex">图形数据的行序号</param>
private Series CreateSeries(string caption, ViewType viewType, DataTable dt, int columnsIndex)
{
Series series = new Series(caption, viewType);
for (int i = 0; i < dt.Rows.Count; i++)
{
string argument = dt.Rows[i][0].ToString();//参数名称
if (string.IsNullOrEmpty(argument)) argument = "未分组";//当x轴参数为空,显示未分组
var value = dt.Rows[i][columnsIndex];//参数值
series.Points.Add(new SeriesPoint(argument, value));
}
//必须设置ArgumentScaleType的类型,否则显示会转换为日期格式,导致不是希望的格式显示
//也就是说,显示字符串的参数,必须设置类型为ScaleType.Qualitative
series.ArgumentScaleType = ScaleType.Qualitative;
series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;//显示标注标签
return series;
}

/// <summary>
/// 创建图表的第二坐标系
/// </summary>
/// <param name="series">Series对象</param>
private SecondaryAxisY CreateAxisY(ChartControl chart, Series series)
{
SecondaryAxisY myAxis = new SecondaryAxisY(series.Name);
((XYDiagram)chart.Diagram).SecondaryAxesY.Add(myAxis);
((LineSeriesView)series.View).AxisY = myAxis;
myAxis.Title.Text = series.Name;
myAxis.Title.Alignment = StringAlignment.Far; //顶部对齐
myAxis.Title.Visible = true; //显示标题
myAxis.Title.Font = new Font("宋体", 9.0f);
Color color = series.View.Color;//设置坐标的颜色和图表线条颜色一致
myAxis.Title.TextColor = color;
myAxis.Label.TextColor = color;
myAxis.Color = color;
return myAxis;
}
#endregion

使用aspose导出

public void ToExcelData(DataTable dt, ChartControl chtData, string title)
{
string path = GetPath();
if (string.IsNullOrEmpty(path)) return;

try
{
Workbook workbook = new Workbook();
workbook.Worksheets.Clear();

Style style2 = workbook.Styles[workbook.Styles.Add()];//新增样式
style2.HorizontalAlignment = TextAlignmentType.Center;//文字居中
style2.Font.Name = "宋体";
style2.Font.Size = 14;
style2.Font.IsBold = true;
style2.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;
style2.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin;
style2.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;
style2.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;
style2.ForegroundColor = System.Drawing.Color.GreenYellow;
style2.Pattern = BackgroundType.Solid;

workbook.Worksheets.Add(title);

int startRow = 0;//写入数据开始行的下标
Worksheet ws0 = workbook.Worksheets[0];
//写入到Excel
SetTitlt(workbook, ws0, startRow, title, dt.Columns.Count);
SetCell(startRow + 2, ws0, dt, style2);
//写入图注
startRow = dt.Rows.Count + 5;
AddStream(startRow, ws0, chtData);

workbook.Save(path);
if (DevExpress.XtraEditors.XtraMessageBox.Show("保存成功,是否打开文件?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
System.Diagnostics.Process.Start(path);//打开指定路径下的文件
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}

/// <summary>
/// 填充字段
/// </summary>
private void SetCell(int startRow, Worksheet sheet, DataTable dt, Style style2)
{
sheet.Cells[startRow, 0].PutValue("统计报表详细列表如下:");
//生成字段名称
for (int i = 0; i < dt.Columns.Count; i++)
{
sheet.Cells[startRow + 1, i].PutValue(dt.Columns[i].ToString());
sheet.Cells[startRow + 1, i].SetStyle(style2);
}
//填充数据
for (int row = 0; row < dt.Rows.Count; row++)
{
for (int column = 0; column < dt.Columns.Count; column++)
{

if (dt.Rows[row][column].GetType() == typeof(string))
{
sheet.Cells[row + startRow + 2, column].PutValue("'" + dt.Rows[row][column].ToString());
}
else
{
sheet.Cells[row + startRow + 2, column].PutValue(dt.Rows[row][column].ToString());
}
}
}
sheet.AutoFitColumns();
}

/// <summary>
/// 设置标题
/// </summary>
private void SetTitlt(Workbook workbook, Worksheet sheet, int startRow, string titlt, int columnsCount)
{
Style style1 = workbook.Styles[workbook.Styles.Add()];//新增样式
style1.HorizontalAlignment = TextAlignmentType.Center;//文字居中
style1.Font.Name = "宋体";
style1.Font.Size = 20;
style1.Font.IsBold = true;
//style1.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;//应用边界线 左边界线
//style1.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; //应用边界线 右边界线
//style1.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;//应用边界线 上边界线
//style1.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;//应用边界线 下边界线
sheet.Cells.Merge(startRow, 0, 2, columnsCount);//合并单元格
//sheet.Cells.SetRowHeight(0, 38);//设置行高
//sheet.Cells.SetColumnWidth(0, 25);//设置列宽
sheet.Cells[0, 0].PutValue(titlt);//添加内容
sheet.Cells[0, 0].SetStyle(style1);
}

/// <summary>
/// 添加图片
/// </summary>
private void AddStream(int rows, Worksheet worksheet, ChartControl charts)
{
worksheet.Cells[rows, 0].PutValue("以折线图展示如下:");
//插入图片到Excel里面
using (MemoryStream stream = new MemoryStream())
{
stream.Position = 0;
ChartControl chart = (ChartControl)charts.Clone();
chart.Size = new Size(1200, 400);
chart.ExportToImage(stream, ImageFormat.Png);
worksheet.Pictures.Add(rows + 1, 0, stream);
}
}
/// <summary>
/// 获取导出路劲
/// </summary>
private string GetPath()
{
string path = "";
using (SaveFileDialog sfd = new SaveFileDialog())
{
sfd.Filter = "Excel文件|*.xlsx";
if (sfd.ShowDialog() == DialogResult.Cancel)
{
return null;
}
path += sfd.FileName;
}
return path;
}

dev chart使用的更多相关文章

  1. DEV Chart控件鼠标选中某条曲线

    this.Chart.ObjectSelected += new DevExpress.XtraCharts.HotTrackEventHandler(this.Chart_ObjectSelecte ...

  2. dev....把pivotgridview和chart一起导出

    首先~: 命名空间: using DevExpress.XtraPrinting;using DevExpress.XtraCharts.Native;using DevExpress.XtraPri ...

  3. dev控件chart简单实现多图例,双曲线,双柱图,曲线与柱图

    1.效果图 2.数据源代码: ; i < ; i++) { == ) { dt1.Rows.Add( * i); dt2.Rows.Add( * i+); } else { dt1.Rows.A ...

  4. C# chart,有关如何在鼠标移动到Series上时显示节点及数据 (有待继续更新)

    一.效果与思路 效果: 解决方案1 用chart的mousemove时间,实时跟踪鼠标最近的X轴的位置,然后把cursorX设置到那个位置上,让用户知道我是选的那一个X的值,同时用tooltip显示该 ...

  5. c# Chart设置样式

    一.chart属性熟悉 能够对C# chart控件属性熟悉起帮助的code, 现在分享给大家,Chart Operate Demo Code Download,如有帮助,别忘点个赞. Chart    ...

  6. Winform & Devexpress Chart使用入门

    一.Chart(Winform) 使用图表控件(chart)首先要理解图表区域(ChartArea).XY轴(AxisX.AxisY).数据点(Series).标题(Title).图例(Legend) ...

  7. 部署Chart应用并使用.net core读取Kubernetes中的configMap

    上一篇文章讲了 k8s使用helm打包chart并上传到腾讯云TencentHub,今天就讲一下使用Helm部署应用并使用configMap代替asp.net core 中的appsettings.j ...

  8. Atitit s2018.5 s5 doc list on com pc.docx  Acc 112237553.docx Acc baidu netdisk.docx Acc csdn 18821766710 attilax main num.docx Atiitt put post 工具 开发工具dev tool test.docx Atiitt 腾讯图像分类相册管家.docx

    Atitit s2018.5 s5  doc list on com pc.docx  Acc  112237553.docx Acc baidu netdisk.docx Acc csdn 1882 ...

  9. c# Chart 服务器端动态创建ChartArea

    1 aspx <x:ContentPanel ShowBorder="true" ShowHeader="false" ID="ContentP ...

随机推荐

  1. MySQL-插入更新 ON DUPLICATE KEY UPDATE

    向数据库中插入一条记录,若该数据的主键值(UNIQUE KEY)已经在表中存在,则执行后面的 UPDATE 操作.否则执行前面的 INSERT 操作. 测试表结构 CREATE TABLE `flum ...

  2. nginx安装(windows下)及配置

    1. 正向代理和反向代理 正向代理是一个位于客户端[用户A]和原始服务器[服务器B]之间的服务器[代理服务器Z],为了从原始服务器取得内容,用户A向代理服务器Z发送一个请求并指定目标(服务器B),然后 ...

  3. 1.2 位于Shell脚本第一行的#!

    学习<shell脚本学习指南>一书,记录总结,便于自己回忆,希望对你有帮助! 2.4 自给自足的脚本:位于第一行的 #! 1.Shell脚本执行过程 当Shell执行一个程序时,会要求UN ...

  4. linux下的开源NFC协议栈

    1. 协议栈名称 neardal 2. 源码 https://github.com/connectivity/neardal.git 3. 由谁维护? intel 4. 基于neardal的nfc协议 ...

  5. SQL Server 新建 数据库关系图 时弹出警告提示此数据库没有有效所有者,因此无法安装数据库关系图支持对象。

    今天创建数据库关系图,发现提示此数据库没有有效所有者,因此无法安装数据库关系图支持对象.若要继续,请首先使用 数据库属性 对话框的文件页或 ALTER AUTHORIZAITION 语句将数据库所有者 ...

  6. Django-DRF(视图相关)

    drf除了在数据序列化部分简写代码以外,还在视图中提供了简写操作.所以在django原有的django.views.View类基础上,drf封装了多个子类出来提供给我们使用. Django REST ...

  7. 云计算openstack核心组件--glance-镜像服务(6)

    glance做什么 OpenStack 由 Glance 提供 Image 服务 获取镜像位置 https://docs.openstack.org/image-guide/obtain-images ...

  8. VMware 虚拟机安装Mac OS X 10.10

    有图有真相,哈哈 一.下载以上文件 1. vm百度软件下载即可,版本都能满足需要,随意好了 2. unlocker 207 3. Mac OS X 10.10镜像 二.基本步骤 1. 虚拟机的安装 下 ...

  9. 再次挑戰UCOSII内核源码

    上次打算看UCOSII(嵌入式实时操作系统)源码还是在大四下学期,当时搜集了很多资料源代码.文档.电子书.结果半路放弃了,究其原因  1.知识原因,虽然已经使用C语言一段时间,但是基础并不好,并没有参 ...

  10. 【转】C# DataTable 导出 Excel 进阶 多行表头、合并单元格、中文文件名乱码

    本文原创地址:http://blog.csdn.net/ranbolwb/article/details/8083983 ,转载请保留本行. 本例子是上一篇 DataTable 导出 Excel 的进 ...