chart的一个问题,因为我用了timer所以,每次写曲线的时候会出现重复数据的问题,在线等。。。

这一站_IT 2011-11-11 12:25:44
第一次执行可以的,但是第二次的时候,因为比如这个Chart1.Series.Add(series1);已经有了,所以会提示,“series1”的字符串已经有了,所以出现错误,我应该怎么解决呢,小弟先谢过了哈!

public partial class TypeRealTimeChart : System.Web.UI.Page
{

private string typeid = "1";
private static valuetime wendu1;
private static valuetime wendu2;
private static valuetime wendu3;
private static valuetime wendu4;
string camroom1;
string camroom2;
string camroom3;
string camroom4;
int i = 0;

struct valuetime
{
public double value;
public DateTime time;
}

protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["pid"] != null)
{
typeid = Request.QueryString["pid"];
//modify chart title by sensorid
switch (typeid)
{
case "1":
Chart1.Titles[0].Text = "温度曲线";
break;
case "2":
Chart1.Titles[0].Text = "湿度曲线";
break;
case "3":
Chart1.Titles[0].Text = "电压曲线";
break;
case "4":
Chart1.Titles[0].Text = "电流曲线";
break;
}
}
}
/// <summary>
/// Handles the Tick event of the Timer1 control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
protected void Timer1_Tick(object sender, EventArgs e)
{
UpdateChart();
}
private void UpdateChart()
{
string dsn = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

SqlConnection con = new SqlConnection(dsn);
con.Open();
// SqlCommand cmd = new SqlCommand("select * from article where articletype=3", con);
SqlDataAdapter da = new SqlDataAdapter("select top 1 campus+room as camroom1 from measurement_v group by campus,room", con);
//SqlDataAdapter da1 = new SqlDataAdapter("select top 1 campus+room as camroom from measurement_v where campus+room !=(select top 1 campus+room from measurement_v group by campus,room)group by campus,room", con);
//SqlDataAdapter da2 = new SqlDataAdapter("select top 1 campus+room as camroom from measurement_v group by campus,room", con);
//SqlDataAdapter da3 = new SqlDataAdapter("select top 1 campus+room as camroom from measurement_v group by campus,room", con);
DataTable dt = new DataTable();
da.Fill(dt);
camroom1 = dt.Rows[0]["camroom1"].ToString();//dt.Rows[0]["content"].ToString();

SqlDataAdapter da1 = new SqlDataAdapter("select top 1 campus+room as camroom2 from measurement_v where campus+room != '" + camroom1 + "' group by campus,room", con);
DataTable dt1 = new DataTable();
da1.Fill(dt1);
camroom2 = dt1.Rows[0]["camroom2"].ToString();//dt.Rows[0]["content"].ToString();

SqlDataAdapter da2 = new SqlDataAdapter("select top 1 campus+room as camroom3 from measurement_v where campus+room != '" + camroom1 + "' and campus+room != '" + camroom2 + "' group by campus,room", con);
DataTable dt2 = new DataTable();
da2.Fill(dt2);
camroom3 = dt2.Rows[0]["camroom3"].ToString();//dt.Rows[0]["content"].ToString();

SqlDataAdapter da3 = new SqlDataAdapter("select top 1 campus+room as camroom4 from measurement_v where campus+room != '" + camroom1 + "' and campus+room != '" + camroom2 + "'and campus+room != '" + camroom3 + "' group by campus,room", con);
DataTable dt3 = new DataTable();
da3.Fill(dt3);
camroom4 = dt3.Rows[0]["camroom4"].ToString();//dt.Rows[0]["content"].ToString();



//数据集显示属性设置


//数据集"出口"显示属性设置
Series series1 = new Series(camroom1); //数据集声明


series1.ChartType = SeriesChartType.Spline; //数据显示方式 Line:为折线 Spline:曲线

// series1.Color = Color.Green; //线条颜色
series1.XValueType = ChartValueType.String;
series1.IsXValueIndexed = true;
series1.IsValueShownAsLabel = false;
series1.YValueType = ChartValueType.Double;
series1.MarkerStyle = MarkerStyle.Circle; //线条上的数据点标志类型
series1.ShadowOffset = 1;

bool bSuc = GetValue(typeid, "1", ref wendu1);
if (bSuc)
{
string lastXValue = wendu1.time.ToLongTimeString();
double lastYValue = wendu1.value;
series1.Points.AddXY(lastXValue, lastYValue);
series1.ToolTip = "X value = #VALX\nY value = #VALY";
//series.IsValueShownAsLabel = true;
}
Chart1.Series.Add(series1);



//数据集"出口"显示属性设置
Series series2 = new Series(camroom2); //数据集声明


series2.ChartType = SeriesChartType.Spline; //数据显示方式 Line:为折线 Spline:曲线

// series2.Color = Color.Red; //线条颜色
series2.XValueType = ChartValueType.String;
series2.IsXValueIndexed = true;
series2.IsValueShownAsLabel = false;
series2.YValueType = ChartValueType.Double;
series2.MarkerStyle = MarkerStyle.Circle; //线条上的数据点标志类型
series2.ShadowOffset = 1;

bSuc = GetValue(typeid, "2", ref wendu1);
if (bSuc)
{
string lastXValue = wendu1.time.ToLongTimeString();
double lastYValue = wendu1.value;
series2.Points.AddXY(lastXValue, lastYValue);
series2.ToolTip = "X value = #VALX\nY value = #VALY";
//series.IsValueShownAsLabel = true;
}
Chart1.Series.Add(series2);

//数据集"出口"显示属性设置
Series series3 = new Series(camroom3); //数据集声明


series3.ChartType = SeriesChartType.Spline; //数据显示方式 Line:为折线 Spline:曲线

// series3.Color = Color.Red; //线条颜色
series3.XValueType = ChartValueType.String;
series3.IsXValueIndexed = true;
series3.IsValueShownAsLabel = false;
series3.YValueType = ChartValueType.Double;
series3.MarkerStyle = MarkerStyle.Circle; //线条上的数据点标志类型
series3.ShadowOffset = 1;

bSuc = GetValue(typeid, "3", ref wendu1);
if (bSuc)
{
string lastXValue = wendu1.time.ToLongTimeString();
double lastYValue = wendu1.value;
series3.Points.AddXY(lastXValue, lastYValue);
series3.ToolTip = "X value = #VALX\nY value = #VALY";
//series.IsValueShownAsLabel = true;
}
Chart1.Series.Add(series3);

//数据集"出口"显示属性设置
Series series4 = new Series(camroom4); //数据集声明


series4.ChartType = SeriesChartType.Spline; //数据显示方式 Line:为折线 Spline:曲线

// series4.Color = Color.Red; //线条颜色
series4.XValueType = ChartValueType.String;
series4.IsXValueIndexed = true;
series4.IsValueShownAsLabel = false;
series4.YValueType = ChartValueType.Double;
series4.MarkerStyle = MarkerStyle.Circle; //线条上的数据点标志类型
series4.ShadowOffset = 1;

bSuc = GetValue(typeid, "4", ref wendu1);
if (bSuc)
{
string lastXValue = wendu1.time.ToLongTimeString();
double lastYValue = wendu1.value;
series4.Points.AddXY(lastXValue, lastYValue);
series4.ToolTip = "X value = #VALX\nY value = #VALY";
//series.IsValueShownAsLabel = true;
}
Chart1.Series.Add(series4);



while (series1.Points.Count > 100)
{
// Remove series points
foreach (Series series in this.Chart1.Series)
{
series.Points.RemoveAt(0);
}
}

// Adjust categorical scale
double axisMinimum = series1.Points[0].XValue;
this.Chart1.ChartAreas[0].AxisX.Minimum = axisMinimum;
this.Chart1.ChartAreas[0].AxisX.Maximum = axisMinimum + 100;
con.Close();
}

/// <summary>
/// 取值
/// </summary>
/// <param name="type">数值类型:1温度;2湿度;3电压;4电流</param>
/// <param name="sensorid">传感器标记:各个机房对应不同传感器标记</param>
/// <returns>返回值</returns>
private bool GetValue(string type, string sensorid, ref valuetime newValue)
{
string connString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
string sql =
"SELECT TOP 1 [value],stime FROM measurements WHERE (type = @type) AND (sensorid = @sensorid) ORDER BY stime DESC";
using (SqlConnection conn = new SqlConnection(connString))
{
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add("@type", SqlDbType.VarChar);
cmd.Parameters["@type"].Value = type;
cmd.Parameters.Add("@sensorid", SqlDbType.VarChar);
cmd.Parameters["@sensorid"].Value = sensorid;
try
{
conn.Open();
SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
if (sdr.Read())
{
newValue.value = (double)sdr["value"];
newValue.time = (DateTime)sdr["stime"];
}
else
{
return false;
}
conn.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
}
return true;
}
}
...全文
169 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tony312ws 2011-11-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 thinkingforever 的回复:]
Chart1.Series.clear();
[/Quote]

刷新相对于第二次加载,必须要把之前的数据给清掉
这一站_IT 2011-11-13
  • 打赏
  • 举报
回复
怎么没人回答了呢,2L的方法貌似也不好使啊
这一站_IT 2011-11-13
  • 打赏
  • 举报
回复
不是,楼上的朋友,我的timer,也就是刷新是为了实时的(隔1000ms)从数据库中找出最新数据,然后将它慢慢的画出一个曲线。所以,用这种方法不能出现画出一条曲线的效果,只是将第一个点不断的改变啦,头都大了,帮帮忙哈,我的毕设啊
a1156025449 2011-11-13
  • 打赏
  • 举报
回复
在循环画之前清,不是画的时候清
这一站_IT 2011-11-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tony312ws 的回复:]
引用 2 楼 thinkingforever 的回复:
Chart1.Series.clear();


刷新相对于第二次加载,必须要把之前的数据给清掉
[/Quote]可是我最终需要的是形成一个曲线,但是这样的话,一直只是一个点啊,不能形成一个曲线啊
thinkingforever 2011-11-11
  • 打赏
  • 举报
回复
Chart1.Series.clear();

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧