我的页面有一个图表,用于显示来自SqlDataSource的数据。
有一个TreeView,其中包含我希望能够作为不同系列添加到图表的数据点列表。用户通过单击该节点的树视图中的复选框选择要添加的项目,然后单击更新按钮以刷新图表。
每个节点的值都设置为表中的列名。
如果树形视图中只选择了一个点,则单击更新按钮时,数据会在图表上以一系列形式出现,没有任何问题。
如果选择了树视图中的多个项目,则单击按钮时会出现ASP.NET错误页面,指出未找到列名称“XXXX”,其中“XXXX”是节点。树中最高项目的值被检查了。
例如,在使用以下选项时会出现“找不到名称为'X1'的列”的错误:
如果仅检查'X1',则数据会显示在图表上。
public void UpdateChart(Object sender, EventArgs e)
{
if (TagTreeView.CheckedNodes.Count > 0)
{
foreach (TreeNode node in TagTreeView.CheckedNodes)
{
// Add a series to the chart
Series series = new Series();
series=Chart1.Series.Add("Series"+node.Value);
series.ChartArea = "ChartArea1";
series.ChartType = (SeriesChartType)Enum.Parse(typeof(SeriesChartType), charts[1], true);
// create a datasource, add it to the page,
SqlDataSource sqlDataSource = new SqlDataSource();
sqlDataSource.ID = "SQLDataSource"+node.Value;
sqlDataSource.ConnectionString = ConfigurationManager.ConnectionStrings["HistoricalDataConnectionString"].ConnectionString;
if (node.Depth > 1)
{
if (node.Parent.Text.Contains("AAA"))
{
MessageBox.Show(node.Value);
sqlDataSource.SelectCommand = "SELECT (Date + CONVERT(datetime,Time)) As TimeStamp, " + node.Value + " FROM AAA ORDER BY TimeStamp";
}
this.Page.Controls.Add(sqlDataSource);
Chart1.DataSourceID = "SQLDataSource"+node.Value;
Chart1.Series["Series" + node.Value].XValueMember = "TimeStamp";
Chart1.Series["Series" + node.Value].YValueMembers = node.Value;
Chart1.DataBind();
}
}
}
}
有没有办法在TreeView中获取每个选定的项目并使用node.value构建查询以向图表添加其他系列?我做了一些工作,看看是否将SqlDatasource和Series对象放入一个数组并循环遍历,但它似乎没有把我带到任何地方。
答案 0 :(得分:0)
为了使其正常工作,将添加到图表中的所有数据点都需要包含在sqlDataSource的select语句中:
sqlDataSource.SelectCommand = "SELECT (Date + CONVERT(datetime,Time)) As TimeStamp, X1, X2, X3 FROM AAA ORDER BY TimeStamp";