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是类的基类,元组,可以有多个基类,但是基类 ...
随机推荐
- QT线程
一.QObject子类 说明:以串口线程传输文件为例子,使用的是MoveTothread函数. void QObject::moveToThread(QThread *targetThread)可以将 ...
- INSPIRED启示录 读书笔记 - 第14章 产品评审团
制定更及时.更可靠的产品决策 制定决策通常是既耗时又费力的,产品公司需要一套机制让决策者和相关人员及时作出明智的产品决策.成立产品评审团是最好的解决途径 组织产品评审团的难点在于既要为高管制定产品决策 ...
- codeforces 439D 思维
题意:两个数组a,b,每次操作可将其中一个数组的一个数字加1或减1,求最小操作次数使得a数组的最小值大于等于b数组的最大值. 思路: 解法一:考虑最终状态,假设a为数组a中最小的数,b为数组b中最大的 ...
- Complex social network Partition for Balanced Subnetworks---Hao Lan Zhang,Jiming Liu,Chunyu Feng,Chaoyi Pang,Tongliang Li,Jing He阅读
摘要:Abstract—Complex social network analysis methods have been applied extensively in various domains ...
- 去除带有iframe页面中的2个滚动条[转]
方法一:加载frame时修改高度 <div> <iframe id="frame_content" name="frame_content&quo ...
- nodejs 中module.exports 和 exports 区别详细介绍
你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块接下来介绍创建过程,感兴趣的朋友可以参考下 你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块.例 ...
- 逆向破解学习二之<TraceMe>
这次在破解TraceMe的时候,我有看过别人的视频.但是我并没有按照别人思路走,而是完全安全自己的思路试了一次.结果破解成功.新手学破解,如果有不对的地方,还请指出来. 004013A0 crackm ...
- vue中编辑代码是不注意格式时会报错
1.是因为我们使用了eslint的代码规范,我们不要使用这种规范就好 2.在build目录下找到webpack.base.conf.js 在里面找到关于eslint的相关配置注释或移除掉就好
- Java中各种集合特点总结
1:集合: (1) Collection(单列集合) List(有序,可重复) ArrayList 底层数据结构是数组,查 ...
- Secret Code
Secret Code 一.题目 [NOIP模拟赛A10]Secret Code 时间限制: 1 Sec 内存限制: 128 MB 提交: 10 解决: 6 [提交][状态][讨论版] 题目描述 ...