ASP.NET通过树状视图选择向图表添加多个系列

ASP.NET通过树状视图选择向图表添加多个系列,asp.net,sql,treeview,charts,Asp.net,Sql,Treeview,Charts,我的页面有一个图表,用于显示来自SqlDataSource的数据 有一个树视图,其中包含一个数据点列表,我希望能够将这些数据点作为不同的系列添加到图表中。用户通过单击树视图中该节点的复选框选择要添加的项目,然后单击更新按钮刷新图表 public void UpdateChart(Object sender, EventArgs e) { if (TagTreeView.CheckedNodes.Count > 0) { fo

我的页面有一个图表,用于显示来自SqlDataSource的数据

有一个树视图,其中包含一个数据点列表,我希望能够将这些数据点作为不同的系列添加到图表中。用户通过单击树视图中该节点的复选框选择要添加的项目,然后单击更新按钮刷新图表

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中选择了多个项目,则单击按钮时会显示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();
                }
            }
        }
    }

是否有方法获取树视图中的每个选定项,并使用node.value构建查询,以向图表中添加其他系列?我已经做了一些工作,看看是否将SqlDatasource和Series对象放入一个数组中并在其中循环,但这似乎并没有把我带到任何地方。

要使其正常工作,将添加到图表中的所有数据点都需要包含在SqlDatasource的select语句中:

sqlDataSource.SelectCommand = "SELECT (Date + CONVERT(datetime,Time)) As TimeStamp, X1, X2, X3 FROM AAA ORDER BY TimeStamp";