c# Chart 服务器端动态创建ChartArea
1 aspx
<x:ContentPanel ShowBorder="true" ShowHeader="false" ID="ContentPanel1" runat="server" >
<asp:Chart ID="ChartData" runat="server" Width="1600px" Height="600px" >
</asp:Chart>
</x:ContentPanel>
2 aspx.cs
private void LoadSeriesBySearch()
{
List<Model.Devices> list = new List<Model.Devices>();
if (ddlDevice.SelectedItem != null)
{
string[] devIds = ddlDevice.SelectedValueArray;
list = new BLL.Devices().GetModelList(string.Format(" ID IN ({0}) ", string.Join(",", devIds)));
}
else
{
list = GetDevicesByUserID(CurrentUser.ID);
} ChartData.Series.Clear();
ChartData.ChartAreas.Clear();
ChartData.Titles.Add("设备数据统计");
ChartArea area = new ChartArea();
#region 初始化area
area.BackGradientStyle = GradientStyle.DiagonalLeft;
area.AxisX.Title = "时间";
area.AxisY.Title = "压力值";
area.AxisX.MajorGrid.LineWidth = ;
area.AxisY.MajorGrid.LineWidth = ;
area.AxisX.LabelStyle.Font = new Font(FontFamily.GenericSansSerif, );
area.AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
area.AxisY.MajorGrid.LineColor = Color.LightSlateGray;
area.AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
ChartData.ChartAreas.Add(area);
#endregion
Color[] cols = { Color.Black, Color.Blue, Color.Brown, Color.Coral, Color.Cyan, Color.Gold, Color.Gray, Color.Green, Color.Lime, Color.Navy };
int i = ;
foreach (Model.Devices dev in list)
{
//创建序列
Series ser = new Series(dev.Name, );
#region 初始化Series
ser.Name = dev.Name;
ser.ChartArea = area.Name;
ser.ChartType = SeriesChartType.Line;
ser.XValueMember = "RecordDate";
ser.YValueMembers = "Pressure";
ser.MarkerBorderColor = Color.BlueViolet;
ser.MarkerBorderWidth = ;
ser.MarkerColor = Color.Red;
ser.MarkerSize = ;
ser.MarkerStyle = MarkerStyle.Diamond;
ser.LabelForeColor = Color.Black;
#region 设置序列的颜色
if (i == )
{
i = ;
}
ser.Color = cols[i];
i++;
#endregion
ser.ShadowColor = Color.Yellow;
ser.ToolTip = "Pressure:#VAL\r\nTime:#VALX";
ser.SmartLabelStyle.Enabled = false;
ser.BorderWidth = ;
ser.ShadowOffset=;
ser.IsVisibleInLegend = true;
ser.IsValueShownAsLabel = true;
ser.IsXValueIndexed = false;
//ser.Legend = dev.Name;
Legend leg = new Legend();
leg.Name = dev.Name;
leg.BackColor = Color.Transparent;
leg.Docking = Docking.Right;
leg.Font = new Font(FontFamily.GenericSansSerif, );
leg.Alignment = StringAlignment.Near;
//leg.Position = new ElementPosition(-100,0,20,20);
ChartData.Legends.Add(leg);
#endregion
//创建点
List<Model.DeviceDatas> dds = new List<Model.DeviceDatas>();
if ((dpStartDate.SelectedDate != null) && (dpEndDate.SelectedDate != null))
{
dds = new BLL.DeviceDatas().GetModelList(string.Format(" DEVICEID={0} AND RECORDDATE BETWEEN '{1}' AND '{2}' ", dev.ID, dpStartDate.SelectedDate, dpEndDate.SelectedDate));
}
else
{
dds = new BLL.DeviceDatas().GetModelList(string.Format(" DEVICEID={0} ", dev.ID));
}
foreach (Model.DeviceDatas dd in dds)
{
ser.Points.AddXY(dd.RecordDate, dd.Pressure);
}
ChartData.Series.Add(ser);
}
} //获得当前用户的设备集合
private List<Model.Devices> GetDevicesByUserID(int p)
{
List<Model.Devices> list = new List<Model.Devices>();
if (CurrentUser.IsSysUser == true)
{
list = new BLL.Devices().GetListTop("", );
}
else
{
//如果存在客户、不存在项目,查询该客户下的所有设备数据
if (CheckForeignIDIsExist(CurrentUser.CustomerID) && !CheckForeignIDIsExist(CurrentUser.ProjectID))
{
list = new BLL.Devices().GetDevicesListByCustomerID((int)CurrentUser.CustomerID, "", "", , );
}
//如果存在客户、存在项目、不存在站点,查询该项目下的设备数据
else if (CheckForeignIDIsExist(CurrentUser.CustomerID) && CheckForeignIDIsExist(CurrentUser.ProjectID) && !CheckForeignIDIsExist(CurrentUser.SiteID))
{
list = new BLL.Devices().GetDevicesListByProjectID((int)CurrentUser.CustomerID, "", "", , );
}
//如果存在客户、项目、站点,查询该站点下的设备数据
else if (CheckForeignIDIsExist(CurrentUser.CustomerID) && CheckForeignIDIsExist(CurrentUser.ProjectID) && CheckForeignIDIsExist(CurrentUser.SiteID))
{
list = new BLL.Devices().GetListTop(string.Format(" SiteID={0} ", CurrentUser.SiteID),);
}
}
return list;
}
3 error:
FineUI的控件
<x:Button runat="server" ID="btnSearch" Text="搜索" Icon="SystemSearch" OnClick="btnSearch_Click" />
可以进入服务器执行,但是server执行之后,并没有异步更新到client。
在FineUI中需要设置其异步区域:
AjaxAspnetControls="ChartData"
<x:PageManager ID="PageManager1" AutoSizePanelID="Panel1" AjaxAspnetControls="ChartData" runat="server" />
4 更进一步,应该写jquery进行异步更新,在server中借助第三方chart库动态创建一个曲线图(或者自己画一个Bitmap曲线图),然后返回给client的某个区域div。
c# Chart 服务器端动态创建ChartArea的更多相关文章
- Hightcharts动态创建series
第一种方法: 申明options时动态设置series,然后再创建chart对象 代码如下: <html> <head> <title>Highcharts Exa ...
- 《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中
http://blog.csdn.net/mazhaojuan/article/details/8599167 先看一下我要实现的功能界面: 这篇文章主要介绍:后台一般处理程序把从数据库查找的数据,转 ...
- 初探原生js根据json数据动态创建table
初探原生js根据json数据动态创建table 小生以实习生的职位进入了一家非纯软件的公司做asp.net开发,大半个月下来发现公司里居然没有前端工程师,这令我很诧异,跟着公司做项目,发现前端后台没有 ...
- Java中如何动态创建接口的实现
有很多应用场景,用到了接口动态实现,下面举几个典型的应用: 1.mybatis / jpa 等orm框架,可以在接口上加注解进行开发,不需要编写实现类,运行时动态产生实现. 2.dubbo等分布式服务 ...
- ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段
ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...
- JavaScript dom 动态创建标记
此前的大多数DOM都是用来查找元素,getElementById和getElementsByTagName都可以方便快捷的找到文档中的某个或者某些特定的元素节点,这些元素随后可以用诸如setAttri ...
- ios动态创建类Class
[Objective-C Runtime动态加载]---动态创建类Class 动态创建类Class,动态添加Class成员变量与成员函数,动态变量赋值与取值,动态函数调用等方法 a.使用objc_al ...
- winform 用户控件、 动态创建添加控件、timer控件、控件联动
用户控件: 相当于自定义的一个panel 里面可以放各种其他控件,并可以在后台一下调用整个此自定义控件. 使用方法:在项目上右键.添加.用户控件,之后用户控件的编辑与普通容器控件类似.如果要在后台往窗 ...
- python动态创建类的声明
动态创建类的声明 使用内置函数type,原型:class type(name, bases, dict)name是类的名字,相当于__class__bases是类的基类,元组,可以有多个基类,但是基类 ...
随机推荐
- java图形验证码
用java实现验证码的生成,以下代码是一个controller,可以直接使用 package org.jxnd.tongxuelu.controller; import java.awt.Color; ...
- mysql服务器3306端口不能远程连接的解决
1.网络检测 1)ping主机可以: 2)telnet 主机3306端口不可以: telnet 主机22端口可以: 说明与本机网络没有关系: 2.端口检测 1)netstat ...
- java基础(8)-集合类
增强for循环 /* *增强for循环 * for(元素类型 变量:数据或Collection集合){ * 使用变量即可,该变量就是元素 * } * 优点:简化了数组和集合的遍历 * 缺点:增强for ...
- Java执行过程
Java的运行原理 在Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器.这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口.编译程序只需要面向虚拟机,生成虚拟机能 ...
- (转)OpenStack Kilo 版本中 Neutron 的新变化
OpenStack Kilo 版本,OpenStack 这个开源项目的第11个版本,已经于2015年4月正式发布了.现在是个合适的时间来看看这个版本中Neutron到底发生了哪些变化了,以及引入了哪些 ...
- JDBC批量插入blob数据
图片从接口读取后是base64的字符串,所以转成byte数组进行保存. 我们一般保存数据的话,都是基本数据,对于这些图片数据大部分会将图片保存成Blob,Clob等. Blob存储的是二进制对象数据( ...
- Node.js初接触(一)
本来还在纠结着到底要学哪一种后台语言呢,突然发现node.js很火,既然能被这么多人推崇,自然是有他的优势的.去百度百科看了一眼,或许是我理解能力太差,并没有了解到很多关于node.js的东西,大概就 ...
- Remoting 学习一调用远程的类就像调用本地的类一样
Remoting 使用TCP/IP 协议,服务端可以是服务,web服务器,类. 例子1. 远程调用服务端的类,就像调用客户端机器上的类一样. 服务端代码 (先定义被客户端调用的类,然后注 ...
- SPOJ - BALNUM 数位dp
题意:求某一区间内的平衡数个数(指一个数,其中出现过的数,如果是偶数,那么必须出现奇数次,反之偶数次) 题解:用三进制来枚举(0到9)所有情况,0代表没有出现,1代表出现奇数次,2代表出现偶数次dp[ ...
- 51nod 1686 二分+离散化
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1686 1686 第K大区间 基准时间限制:1 秒 空间限制:131072 ...