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的更多相关文章

  1. Hightcharts动态创建series

    第一种方法: 申明options时动态设置series,然后再创建chart对象 代码如下: <html> <head> <title>Highcharts Exa ...

  2. 《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中

    http://blog.csdn.net/mazhaojuan/article/details/8599167 先看一下我要实现的功能界面: 这篇文章主要介绍:后台一般处理程序把从数据库查找的数据,转 ...

  3. 初探原生js根据json数据动态创建table

    初探原生js根据json数据动态创建table 小生以实习生的职位进入了一家非纯软件的公司做asp.net开发,大半个月下来发现公司里居然没有前端工程师,这令我很诧异,跟着公司做项目,发现前端后台没有 ...

  4. Java中如何动态创建接口的实现

    有很多应用场景,用到了接口动态实现,下面举几个典型的应用: 1.mybatis / jpa 等orm框架,可以在接口上加注解进行开发,不需要编写实现类,运行时动态产生实现. 2.dubbo等分布式服务 ...

  5. 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 ...

  6. JavaScript dom 动态创建标记

    此前的大多数DOM都是用来查找元素,getElementById和getElementsByTagName都可以方便快捷的找到文档中的某个或者某些特定的元素节点,这些元素随后可以用诸如setAttri ...

  7. ios动态创建类Class

    [Objective-C Runtime动态加载]---动态创建类Class 动态创建类Class,动态添加Class成员变量与成员函数,动态变量赋值与取值,动态函数调用等方法 a.使用objc_al ...

  8. winform 用户控件、 动态创建添加控件、timer控件、控件联动

    用户控件: 相当于自定义的一个panel 里面可以放各种其他控件,并可以在后台一下调用整个此自定义控件. 使用方法:在项目上右键.添加.用户控件,之后用户控件的编辑与普通容器控件类似.如果要在后台往窗 ...

  9. python动态创建类的声明

    动态创建类的声明 使用内置函数type,原型:class type(name, bases, dict)name是类的名字,相当于__class__bases是类的基类,元组,可以有多个基类,但是基类 ...

随机推荐

  1. R的t-test检验

    1.t-test的功能:单因素二水平的假设检验. H0:与我们想过要的结果相反的假设,比如我们想要的是两组数据的差异性,那么这个假设是:两组数据没有差异性. H1或Ha:备择假设,与H0假设相反. 2 ...

  2. list— 把数组中的值赋给一组变量

    (PHP 4, PHP 5, PHP 7) list — 把数组中的值赋给一组变量 array list ( mixed $var1 [, mixed $... ] ) 像 array() 一样,这不 ...

  3. 四、golang内置函数、递归、闭包、数组切片和map

    一.总体内容 1.内置函数.递归函数.闭包 2.数组和切片 3.map数据结构 4.package介绍 一.内置函数 注意:值类型用new来分配内存,引用类型用make来分配内存 1.close:主要 ...

  4. 20145210姚思羽《网络对抗》MSF基础应用实验

    20145210姚思羽<网络对抗>MSF基础应用实验 实验后回答问题 1.用自己的话解释什么是exploit,payload,encode. exploit就是进行攻击的那一步 paylo ...

  5. poj 1573 Robot Motion【模拟题 写个while循环一直到机器人跳出来】

                                                                                                         ...

  6. Struts2的<s:date>标签使用详解[转]

    作用:用来格式化显示日期的格式. 它可以用一种你指定的格式来显示 (如:“yyyy-MM-dd”),可以生成通俗易懂的注释(如:in 2 hours,14 minutes),或者用预先定义的一个格式来 ...

  7. android.intent.category.LAUNCHER和android.intent.action.MAIN

    一个应用程序可以有多个Activity,每个Activity是同级别的,那么在启动程序时,最先启动哪个Activity呢? 有些程序可能需要显示在程序列表里,有些不需要.怎么定义呢? android. ...

  8. HDU 5183 Negative and Positive (NP) (hashmap+YY)

    学到了以邻接表方式建立的hashmap 题意:给你一串数a和一个数k,都有正有负,问知否能找到一对数(i,j)(i<=j)保证a [i] - a [i+1] + a [i+2] - a [i+3 ...

  9. [kuangbin带你飞]专题十 匹配问题 一般图匹配

    过去做的都是二分图匹配 即 同一个集合里的点 互相不联通 但是如果延伸到一般图上去 求一个一般图的最大匹配 就要用带花树来解决 带花树模板 用来处理一个无向图上的最大匹配 看了一会还是不懂  抄了一遍 ...

  10. 自己动手实现一个简化版的requireJs

    一直想实现一个简单版本的requireJs,最直接的办法去看requireJs源码搞明白原理,但是能力有限requireJs的源码比想象的要复杂许多,看了几遍也不是很明白,最后通过搜索找到了一些有价值 ...