ASP.NET通过树视图选择将多个系列添加到图表中

时间:2011-06-01 22:34:13

标签: asp.net sql treeview charts

我的页面有一个图表,用于显示来自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对象放入一个数组并循环遍历,但它似乎没有把我带到任何地方。

1 个答案:

答案 0 :(得分:0)

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

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