以以下表格为例:
TimeStamp ValueA ValueB Name
5/1/2011 12:00:00 100 150 Item1
5/1/2011 12:00:00 101 151 Item2
5/1/2011 12:10:00 110 160 Item1
5/1/2011 12:10:00 111 151 Item2
5/1/2011 12:20:00 102 170 Item1
5/1/2011 12:00:00 112 171 Item2
我有一个树形视图,节点为Item1和Item2,每个节点可选择ValueA和ValueB:
Item1
-ValueA
-ValueB
Item2
-ValueA
-ValueB
当用户选择ValueA或ValueB时,应将其作为系列添加并显示在图表上。
数据正确显示,但仅适用于最后一个选中的ItemX。如果您在树视图中选中Item1->ValueA,然后选中Item2->ValueA,并使用下面的代码更新图表,则该系列仅会显示Item2的ValueA。
SqlDataSource sqlDataSource = new SqlDataSource();
sqlDataSource.ID = "SQLDataSourceChart";
foreach (TreeNode node in TagTreeView.CheckedNodes)
{
// Add a series to the chart
Series series = Chart1.Series.Add("Series" + node.Value);
series.ChartArea= "ChartArea1";
series.ChartType = (SeriesChartType)Enum.Parse(typeof(SeriesChartType), charts[1], true);
sqlDataSource.ConnectionString = ConfigurationManager.ConnectionStrings["HistoricalDataConnectionString"].ConnectionString;
if (node.Depth > 1)
{
sqlDataSource.SelectCommand = @"SELECT "+ node.Value + " [ExampleTable] WHERE [Name] = '" + node.Parent.Text + "' ORDER BY TimeStamp";
this.Page.Controls.Add(sqlDataSource);
Chart1.DataSourceID = "SQLDataSourceChart";
Chart1.Series["Series" + node.Value].XValueMember = "TimeStamp";
Chart1.Series["Series" + node.Value].YValueMembers = node.Value;
}
}
Chart1.DataBind();
我认为我对图表中的系列是如何添加并不清楚。最初的假设是,在处理foreach循环时,根据node.Value为名称将系列添加到图表中,得到一个系列列表,然后在databind上将它们添加到图表上。
实际发生的事情似乎是所有系列都基于图例,只有treeview中选择的最后一个项目的数据在图表中可见。
最终我想要发生的是用户可以选择任何ValueA和ValueB的组合,无论是Item1还是Item2,都会在图表上显示出相应数量的系列。这是否可能,如果可能,我的方法的哪个部分是不正确的?
经过进一步检查,我认为当为Item1选择ValueA,为Item2选择ValueB时出现错误的原因,以及结果仅返回最后一个选定项的原因是,sqlDataSource.SelectCommand具有foreach循环中设置的最后一个值,即最后选择的项。
是否有一种方法将sqlDataSource绑定到特定系列或提供单独的查询给每个系列,以便当数据绑定到图表时,每个系列都看到正确的查询?