我无法直接从sql数据库更新和格式化asp.net上的图表。来自数据库的数据通过,但我无法弄清楚如何格式化x轴,使minDateTime为最小值,maxDateTime为最大值。但主要问题是,每次我添加X和Y值时,图表似乎都会用新值替换图表中已有的所有内容,而不是将它们添加到之前的那些值。
Backcode chart(这里隐藏的是sql东西,因为这不是问题):
private void Graph(int Id)
{
DataTable dt = new DataTable();
using (SqlConnection con = new SqlConnection(@"HIDDEN HERE"))
{
con.Open();
SqlCommand cmd = new SqlCommand("HIDDEN HERE", con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
con.Close();
}
string[] x = new string[dt.Rows.Count];
double[] y = new double[dt.Rows.Count];
for (int i = 0; i < dt.Rows.Count; i++)
{
y[i] = Convert.ToDouble(dt.Rows[i][0]);
x[i] = dt.Rows[i][1].ToString(); y);
LiveChart.Series["LiveSeries"].Points.AddXY(minDateTime.Hour,
y.Last());
//This works in some way but doesnt do what i want:
//LiveChart.Series["LiveSeries"].Points.DataBindXY(x, y);
}
LiveChart.Series[0].XValueType = System.Web.UI.DataVisualization.Charting.ChartValueType.DateTime;
LiveChart.ChartAreas[0].AxisX.IntervalType = System.Web.UI.DataVisualization.Charting.DateTimeIntervalType.Hours;
//This completely messes up my chart, but this is what i want, min value to be current hour and max value to be end of day.
//LiveChart.ChartAreas[0].AxisX.Minimum = minDateTime.Hour;
//LiveChart.ChartAreas[0].AxisX.Maximum = maxDateTime.Hour;
}
在tick事件中调用Graph()方法。 string [] x从sql server接收datetime,double [] y接收相应的值。
主要宣言:
minDateTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
maxDateTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59, 999);
我使用addXY(minDateTime.Hour,y.Last())的原因是因为我想要表示进入y数组的最后一个值的当前小时(实际上是小时和分钟,但我不知道如何)。该图表将最后一个y值与当前小时绑定,但它不会添加更多,这意味着每个新y值将仅与当前小时绑定而不显示之前的所有小时。我知道我应该使用数据绑定,但在这种情况下我不知道该怎么做。我希望数据库中的最后一个y值与每个tick的当前小时(和分钟)绑定并添加到此上,以便图形填满,不像它现在不会添加新数据点时的情况。
我该怎么做?