【发布时间】:2012-02-11 02:43:33
【问题描述】:
我在数据库表中有以下数据, 列:日期、小时(从 1 到 24)和温度。
我想创建一个折线图,在 x 轴上显示从 1 到 24 的小时数,在 Y 轴上显示温度。
现在棘手的部分是我想为每个日期设置不同的颜色线。因此,如果日期是 2012-01-15,那么我有一条从 1 到 24 的红线,显示温度的变化。如果日期是 2012-01-14,那么蓝色也是从 1 到 24。
明确地说,我想在一张图表中包含多个日期。
这是我的一些代码
SqlConnection conn2 = new SqlConnection(@"connectionString");
conn2.Open();
SqlCommand cmd2 = new SqlCommand();
cmd2.Connection = conn2;
cmd2.CommandText = "SELECT * FROM observation WHERE day BETWEEN @fromDate AND @toDate ORDER BY day ASC, hour ASC ";
cmd2.Parameters.AddWithValue("fromDate", dateTimePicker2.Value.Date);
cmd2.Parameters.AddWithValue("toDate", dateTimePicker3.Value.Date);
SqlDataReader reader = cmd2.ExecuteReader();
DataSet ds = new DataSet();
DataTable dt = new DataTable("dateRange");
dt.Columns.Add("day");
dt.Columns.Add("hour");
dt.Columns.Add("temp");
DataRow dr = dt.NewRow();
int counter = 0;
while (reader.Read())
{
if (reader[1].ToString() != dt.TableName)
{
if (dt.Rows.Count != 0 && dt.TableName != "dateRange")
{
dt.AcceptChanges();
ds.Tables.Add(dt);
counter++;
}
dt = new DataTable(reader[1].ToString());
dt.Columns.Add("day"):
dt.Columns.Add("hour");
dt.Columns.Add("temp");
}
dr = dt.NewRow();
dr[0] = reader[2];
dr[1] = reader[3];
dt.Rows.Add(dr);
}
if (dt.Rows.Count != 0)
{
dt.AcceptChanges();
ds.Tables.Add(dt);
}
else
{
lblError.Visible = false;
}
for (int i = 0; i < counter; i++)
{
chart1.Series[i].Name = i.ToString();
chart1.Series[i].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
chart1.Series[i].BorderWidth = 5;
if (i % 2 == 0)
{
chart1.Series[i].Color = Color.Red;
}
else
{
chart1.Series[i].Color = Color.Green;
}
chart1.DataSource = ds.Tables[i];
chart1.Series[i].XValueMember = "hour";
chart1.Series[i].YValueMembers = "temp";
}
chart1.Legends[0].Alignment = StringAlignment.Center;
chart1.Legends[0].Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
chart1.DataBind();
chart1.Visible = true;
cmd2.Connection.Close();
谢谢!
【问题讨论】:
-
您遇到问题的部分是什么?从数据库中提取数据;创建图表;为不同的日期制定不同的颜色;在一个图表中显示多条线?如果您可以发布一些您已经开始使用的代码,您可以期待简短而简洁的答案。还是您正在寻找粗略的指导方针?
-
@Jonno 我现在遇到的麻烦是在 x 轴上保持 1 到 24 的同时显示多行。我试图在一个 DataSet 中创建多个表,但是无法指示要使用哪个表....我不确定如何创建多行,那会是多个系列吗?
-
@Jonno。我添加了我拥有的代码。我知道这很混乱:S 任何帮助将不胜感激
标签: c# winforms visual-studio-2010 charts