前台代码:

                        <asp:Chart ID="Chart1" runat="server" Height="500px" Width="1000px" BorderlineWidth="1" ><Titles><asp:Title Name="Title1" runat="server" Text="设备稼动率波动图" Font="宋体,20pt"></asp:Title></Titles><legends><asp:Legend IsTextAutoFit="False" DockedToChartArea="NotSet" Name="Default" BackColor="Transparent" Font="宋体, 10pt, style=Bold"></asp:Legend></legends><Series></Series><ChartAreas></ChartAreas></asp:Chart>

后台代码:包括动态生成ChartArea和保存为图片:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Web.UI.DataVisualization.Charting;
using System.Text;
using Microsoft.Win32;
using System.Drawing;public partial class MSChartTest : System.Web.UI.Page
{int iNowYear = DateTime.Now.Year;protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){for (int i = iNowYear - 10; i < iNowYear + 10; i++){this.DDLYear.Items.Add(i.ToString());}this.DDLYear.SelectedValue = iNowYear.ToString();string SQL = "select  lookup_value_code,lookup_value_Name from T_EB_DB_LOOKUP_VALUE where LOOKUP_TYPE_CODE='RES_DEV_LOCATION'";DataSet ds = OraHelper.GetDateDS(SQL);this.DDLSYS.Items.Add("");if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0){//DataTable dtSYS = ds.Tables[0];//DataRow dr = dtSYS.NewRow();//dr[0] = ""; dr[1] = "";//dtSYS.Rows.InsertAt(dr, 0);//this.DDLSYS.DataSource = dtSYS;//this.DDLSYS.DataValueField = "lookup_value_Name";//this.DDLSYS.DataTextField = "lookup_value_Name";//this.DDLSYS.DataBind();for (int i = 0; i < ds.Tables[0].Rows.Count; i++){this.DDLSYS.Items.Add(ds.Tables[0].Rows[i]["lookup_value_Name"].ToString().Trim());}}}}protected void btnSearch_Click(object sender, EventArgs e){ SearchChart();}protected void SearchChart(){Chart1.ChartAreas.Clear();Chart1.Series.Clear();DataTable dtChart = this.Getdt();//this.GridView1.DataSource = dtChart;//this.GridView1.DataBind();if (dtChart != null && dtChart.Rows.Count>0){DataView dv = dtChart.DefaultView;DataTable dtDeviceName = dv.ToTable(true, "DEVICE_NAME");//零件列表,ChartArea数 DataSet ds = new DataSet();ChartArea _ChartArea = null;Series _SeriesJRATE = null;Series _SeriesDRATE = null;List<string> oCharAreas = new List<string>();float firstChartAreaY = 0;for (int i = 0; i < dtDeviceName.Rows.Count; i++){string DeviceName = dtDeviceName.Rows[i]["DEVICE_NAME"].ToString();DataRow[] drList = dtChart.Select(" DEVICE_NAME='" + DeviceName + "' ");if (drList != null && drList.Length>0){DataTable dt = drList.CopyToDataTable();dt.TableName = DeviceName;ds.Tables.Add(dt);_ChartArea = new ChartArea();_ChartArea.AxisX.MajorGrid.LineColor = System.Drawing.Color.FromArgb(224, 224, 224);_ChartArea.AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash;_ChartArea.AxisY.MajorGrid.LineColor = System.Drawing.Color.FromArgb(224, 224, 224);_ChartArea.AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;_ChartArea.Position.Auto = true;_ChartArea.Name = DeviceName;//设定Chart Name////_ChartArea.AxisY.Title = "单位";////_ChartArea.AxisY.TitleAlignment = StringAlignment.Far;////_ChartArea.AxisX.Title = "月份";////_ChartArea.AxisX.TitleAlignment = StringAlignment.Far;
_ChartArea.AxisX.Minimum = 1;//起始值_ChartArea.AxisX.Maximum = 12;//结束值_ChartArea.AxisX.Interval = 1;//间隔_ChartArea.AxisX.IntervalType = DateTimeIntervalType.Number;//间隔类型指定//_ChartArea.AxisX.LabelStyle.Interval = 1; //X文本间隔//_ChartArea.AxisX.LabelStyle.Font = new System.Drawing.Font("隶书", 12);//_ChartArea.AxisX.MajorGrid.Interval = 1;  //X主要辅助线间隔//_ChartArea.AxisX.MinorGrid.Interval = 1;//X次要辅助线间隔//_ChartArea.AxisX.MinorTickMark.Interval = 1;//X次要刻度线间隔//_ChartArea.AxisX.MajorTickMark.Interval = 1;//X主要刻度线间隔//_ChartArea.AxisY.MinorGrid.Interval = 1;//Y次要辅助线间隔//_ChartArea.AxisY.MajorGrid.Interval = 1;//Y主要辅助线间隔//_ChartArea.AxisY.LabelStyle.Interval = 0.5;
                        Chart1.ChartAreas.Add(_ChartArea);Title title = new Title(_ChartArea.Name, Docking.Top);Chart1.Titles.Add(title);title.DockedToChartArea = _ChartArea.Name;title.IsDockedInsideChartArea = false;title.Alignment = ContentAlignment.TopCenter;_SeriesJRATE = new Series();_SeriesJRATE.ChartType = SeriesChartType.Spline;_SeriesJRATE.Name = DeviceName + "_SJ";_SeriesJRATE.ChartArea = _ChartArea.Name;_SeriesJRATE.BorderColor = System.Drawing.Color.Blue;_SeriesJRATE.Color = Color.Blue;_SeriesJRATE.BorderWidth = 1;_SeriesJRATE.ShadowOffset = 1;_SeriesJRATE.IsValueShownAsLabel = true;_SeriesJRATE.MarkerStyle = MarkerStyle.Triangle;_SeriesJRATE.LegendText = "稼动率";if (i == 0) { _SeriesJRATE.IsVisibleInLegend = true; }else{ _SeriesJRATE.IsVisibleInLegend = false; }Chart1.Series.Add(_SeriesJRATE); //加入Series
_SeriesDRATE = new Series();_SeriesDRATE.ChartType = SeriesChartType.Spline;_SeriesDRATE.Name = DeviceName + "_SD";_SeriesDRATE.ChartArea = _ChartArea.Name;_SeriesDRATE.BorderColor = System.Drawing.Color.Green;_SeriesDRATE.Color = Color.Green;_SeriesDRATE.BorderWidth = 1;_SeriesDRATE.ShadowOffset = 1;_SeriesDRATE.IsValueShownAsLabel = true;_SeriesDRATE.MarkerStyle = MarkerStyle.Square;_SeriesDRATE.LegendText = "直接率";if (i == 0) { _SeriesDRATE.IsVisibleInLegend = true; }else { _SeriesDRATE.IsVisibleInLegend = false; }Chart1.Series.Add(_SeriesDRATE); //加入Series
                }}int CRows = Chart1.ChartAreas.Count % 2 == 1 ? (Chart1.ChartAreas.Count / 2 + 1) : (Chart1.ChartAreas.Count / 2);Chart1.Height = 60 + CRows * 420;for (int i = 0; i < Chart1.Legends.Count; i++){Chart1.Legends[i].Docking = Docking.Top;Chart1.Legends[i].Alignment = StringAlignment.Center;}Chart1.Legends[0].Position.X = (float)(((Chart1.Width.Value / 2 - 150) / Chart1.Width.Value) * 100);Chart1.Legends[0].Position.Y = (float)((65/ Chart1.Height.Value) * 100);Chart1.Legends[0].Position.Height = (float)((20 / Chart1.Height.Value) * 100);Chart1.Legends[0].Position.Width = (float)((320 / Chart1.Width.Value) * 100);////Chart1.Legends[0].BackColor = Color.Blue;//Chart1.Legends[0].BorderColor = Color.Blue;//Chart1.Legends[0].ForeColor = Color.Blue;        for (int i = 0; i < Chart1.ChartAreas.Count; i++){int RowNum = i / 2 + 1;if (i % 2 == 0)   //第一列
                {if (i == 0) //第一行
                    {Chart1.ChartAreas[i].Position.Y = Chart1.ChartAreas.Count <=2 ? 20 : 11;}else  //非第一行
                    {Chart1.ChartAreas[i].Position.Y = Chart1.ChartAreas[i-2].Position.Y+ Chart1.ChartAreas[i-2].Position.Height;}Chart1.ChartAreas[i].Position.X = 0.0F;Chart1.ChartAreas[i].Position.Width = 48;Chart1.ChartAreas[i].Position.Height = (float)((320 / Chart1.Height.Value) * 100);}else  //第二列
                {if (i == 1) //第一行
                    {Chart1.ChartAreas[i].Position.Y = Chart1.ChartAreas.Count <= 2 ? 20 : 11;}else  //非第一行
                    {Chart1.ChartAreas[i].Position.Y = Chart1.ChartAreas[i - 2].Position.Y + Chart1.ChartAreas[i - 2].Position.Height;}Chart1.ChartAreas[i].Position.X =50;// (float)(Chart1.Height.Value * 0.5 - 10)Chart1.ChartAreas[i].Position.Width = 48;Chart1.ChartAreas[i].Position.Height = (float)((320 / Chart1.Height.Value) * 100);}if (ds.Tables[i] != null && ds.Tables[i].Rows.Count > 0){for (int j = 0; j < ds.Tables[i].Rows.Count; j++){int iM = int.Parse(ds.Tables[i].Rows[j]["MONTH"].ToString());double dJ = double.Parse(ds.Tables[i].Rows[j]["JRATE"].ToString());double dD = double.Parse(ds.Tables[i].Rows[j]["DRATE"].ToString());Chart1.Series[Chart1.ChartAreas[i].Name + "_SJ"].Points.AddXY(iM, dJ);Chart1.Series[Chart1.ChartAreas[i].Name + "_SD"].Points.AddXY(iM, dD);}//for (int m = 2; m <= 11; m++)//{//    string strM = m < 10 ? "0" + m.ToString() : m.ToString();//    Chart1.Series[Chart1.ChartAreas[i].Name + "_SH"].Points.AddXY(m, 0);//}
                }}}}protected DataTable Getdt(){string sYear = this.DDLYear.SelectedValue.Trim();string sSYS = this.DDLSYS.SelectedValue.Trim();int iYear = iNowYear;StringBuilder sb = new StringBuilder();sb.Append(@"SELECT NVL(TA.RESOURCE_NAME,'') DEVICE_NAME ,NVL(SL.LOOKUP_VALUE_NAME,'') INSTALL_LOCATION,SUBSTR(YEAR_MONTH,6,2) MONTH,CASE HOURS_STAT_ACT WHEN 0 THEN 0 ELSE ROUND((HOURS_TRAN+HOURS_TRAN_ALLE+HOURS_PREPARE+HOURS_PLAN_CARE)*100/HOURS_STAT_ACT,2)END JRATE,CASE HOURS_STAT_ACT WHEN 0 THEN 0 ELSE ROUND(HOURS_TRAN*100/HOURS_STAT_ACT,2)END DRATEFROM RES.T_RES_BU_MOVE_REATE TMLEFT JOIN RES.T_RES_BU_MOVE_REATE_D TD ON TM.MOVE_REATE_ID=TD.MOVE_REATE_IDLEFT JOIN T_RES_BU_DEVICE_ACCOUNT TAON TD.RESOURCE_ID=TA.DEVICE_ACCOUNT_IDLEFT JOIN T_EB_DB_LOOKUP_VALUE SL ONSL.LOOKUP_VALUE_CODE=TA.INSTALL_LOCATIONAND SL.LOOKUP_TYPE_CODE='RES_DEV_LOCATION'WHERE 1=1 ");if (int.TryParse(sYear, out iYear)){sb.Append(@" AND TM.YEAR_MONTH LIKE '" + iYear.ToString() + "%' ");}else { }if (!string.IsNullOrEmpty(sSYS)){sb.Append(@" AND TA.INSTALL_LOCATION='" + sSYS + "' ");}else { }sb.Append(@" ORDER BY DEVICE_NAME,MONTH ");//DataTable dtChart = Gateway.Default.FromCustomSql(sb.ToString()).ToDataSet().Tables[0];
DataSet ds = OraHelper.GetDateDS(sb.ToString());if (ds != null && ds.Tables.Count > 0){DataTable dtChart = ds.Tables[0];return dtChart;}else return null;}protected void btnClear_Click(object sender, EventArgs e){this.DDLYear.Text = iNowYear.ToString();this.DDLSYS.Text ="";}protected void btnOut_Click(object sender, EventArgs e){SearchChart();string sPath = Server.HtmlEncode(Request.PhysicalApplicationPath);string Path = sPath + "\\TempImageFiles\\波动图.jpg";Chart1.SaveImage(Path);string DownloadPath=Server.HtmlEncode(Request.ApplicationPath);DownloadFile(DownloadPath+"/TempImageFiles/波动图.jpg", "波动图.jpg");}/// <summary>/// 下载文件/// </summary>/// <param name="filename">文件物理地址</param>protected void DownloadFile(string filePath,string fName){System.IO.FileInfo fi = new System.IO.FileInfo(filePath);string fileextname = fi.Extension;string DEFAULT_CONTENT_TYPE = "application/unknown";RegistryKey regkey, fileextkey;string filecontenttype;try{regkey = Registry.ClassesRoot;fileextkey = regkey.OpenSubKey(fileextname);filecontenttype = fileextkey.GetValue("Content Type", DEFAULT_CONTENT_TYPE).ToString();}catch{filecontenttype = DEFAULT_CONTENT_TYPE;}Response.Clear();Response.Charset = "utf-8";Response.Buffer = true;this.EnableViewState = false;Response.ContentEncoding = System.Text.Encoding.UTF8;Response.AppendHeader("Content-Disposition", "attachment;filename=" +
Context.Server.UrlPathEncode(fName));Response.ContentType = filecontenttype;Response.WriteFile(filePath);Response.Flush();Response.Close();Response.End();}
}

转载于:https://www.cnblogs.com/xytmj/p/3893986.html

MSChart使用之动态生成多个多行ChartArea相关推荐

  1. 【转载】 Python动态生成变量

    用Python循环创建多个变量, 如创建 a1=   .a2=   .a3=   .a4=   .a5=    或  self.a1=    .self.a2=   . self.a3= 一. 可以通 ...

  2. Asp.net动态生成html页面

    作者:网际浪子专栏(曾用名littlehb)  http://blog.csdn.net/littlehb/ 适用于:Microsoft ASP.NET 摘要:asp.net动态生成html页面,适用 ...

  3. awstats CGI模式下动态生成页面缓慢的改进

    本文可以看做是 多server多站点情况下awstats日志分析 这篇文章的下篇,在使用过程中发现awstats在cgi模式下动态生成分析报告慢的问题 (尤其是有些站点每天两个多G的日志,查看起来简直 ...

  4. 使用Vue动态生成form表单的实例代码

    具有数据收集.校验和提交功能的表单生成器,包含复选框.单选框.输入框.下拉选择框等元素以及,省市区三级联动,时间选择,日期选择,颜色选择,文件/图片上传功能,支持事件扩展. 欢迎大家star学习交流: ...

  5. jquery动态生成SKU表格

    sku的概念 SKU=Stock Keeping Unit(库存量单位).即库存进出计量的基本单元,可以是以件,盒,托盘等为单位.SKU这是对于大型连锁超市DC(配送中心)物流管理的一个必要的方法.现 ...

  6. html指定表格行列书,js动态生成指定行数的表格

    下面用js实现可以生成用户所需行数的表格. 1.首先在body中填入下列代码,获取用户填入的行数值 动态生成表格 行 效果如下图所示: 2.header中添加js代码 function table() ...

  7. 使用未编译的XAML动态生成WPF控件

    我们所经常使用的WPF界面大部分都是使用XAML文件进行定义编写,然后经编译生成窗体和控件,还有的就是在后台代码中定义控件和元素-这些都是在程序编译后已经固化不变的了-如果想要在程序编译后再使用XAM ...

  8. 2)JS动态生成HTML元素的爬取

    2)JS动态生成HTML元素的爬取 import java.util.List;import org.openqa.selenium.By; import org.openqa.selenium.We ...

  9. 动态生成CheckBox(Winform程序)

    在做用户权限设置功能时,需要做一个动态生成权限列表的功能.(笔记.分享) //1.清空权限控件组的默认控件 panelPermissions.Controls.Clear();_groupBoxLis ...

最新文章

  1. “时隔 10 年,重新开始写代码的我要崩溃了!”
  2. 使用fontTools库
  3. leetcode186. 翻转字符串里的单词 II
  4. 配置生产环境加路径 /开发环境
  5. 什么样的人才容易被骗?
  6. L1-047 装睡-PAT团体程序设计天梯赛GPLT
  7. 手把手教你用Python来模拟绘制自由落体运动过程中的抛物线(附源码)
  8. java调用caffe_Caffe中master与windows分支差异对比及通过命令提示符编译Caffe源码操作步骤...
  9. iDataForum2010数据库技术论坛总结
  10. 面向对象——意图与逻辑(五)
  11. html 段前空格_前端 -- HTML
  12. POJ 3624 Charm Bracelet【01背包】
  13. centOS7的vi中如何使用汉语拼音和五笔
  14. vba rnd_VBA Rnd()函数不正确,应使用什么代替
  15. 计算机应用模块等级考试大纲,全国计算机等级考试大纲 年版.doc
  16. S32K144学习笔记:4 信号复用和引脚分配
  17. 目前主流跨端开发技术一览
  18. 服务器市场混乱,信息安全是关键
  19. 程序员到底有多累、多辛苦?
  20. 2007年图灵奖--克拉克、埃默生、希法凯斯简介

热门文章

  1. Kubernetes VS Mesos
  2. 链游的困境与出路,一场暴风雨正在酝酿!
  3. 麒麟970升级鸿蒙吗,受鸿蒙系统影响,众多华为手机或要说再见,包括麒麟970机型!...
  4. 卓越性能 の 军火库(非广告)
  5. PHP接口开发签名验证原理详解
  6. python可以应用lbm_格子玻尔兹曼方法(LBM)python程序提速
  7. 解决awvs报错:database service cannot be started或者Acunetix:cloud not initialize database
  8. 某农商行用户画像项目——用户画像分析部分
  9. NLP自然语言处理——文本分类(CNN卷积神经网络)
  10. Unity IMGUI之避坑排雷