使用ASP.NET CHART CONTROL添加动态图表,c#

5 c# asp.net

我想在网页中添加动态图表.就像这样......

我从用户处获取开始日期和结束日期,并在开始日期和结束日期之间为每个日期绘制单独的图表.

我从sql数据库获取数据并将其与图表绑定如下:

   SqlConnection UsageLogConn = new   
          SqlConnection(ConfigurationManager.ConnectionStrings["UsageConn"].ConnectionString);
                UsageLogConn.Open();//open connection

                string sql = "SELECT v.interval,dateadd(mi,(v.interval-1)*2,'" + startdate + " 00:00:00') as 'intervaltime',COUNT(Datediff(minute,'" + startdate + " 00:00:00',d.DateTime)/2) AS Total  FROM usage_internet_intervals v left outer join (select * from Usage_Internet where " + name + "  LIKE ('%" + value + "%') and DateTime BETWEEN '" + startdate + " 00:00:00' AND '" + enddate + " 23:59:59') d on v.interval = Datediff(minute,'" + startdate + " 00:00:00',d.DateTime)/2 GROUP BY v.interval,Datediff(minute,'" + startdate + " 00:00:00',d.DateTime)/2 ORDER BY Interval";

                SqlCommand cmd = new SqlCommand(sql, UsageLogConn);
                SqlDataAdapter mySQLadapter = new SqlDataAdapter(cmd);

                Chart1.DataSource = cmd;

                // set series members names for the X and Y values 
                Chart1.Series["Series 1"].XValueMember = "intervaltime";
                Chart1.Series["Series 1"].YValueMembers = "Total";
                UsageLogConn.Close();
                // data bind to the selected data source
                Chart1.DataBind();


                cmd.Dispose();
Run Code Online (Sandbox Code Playgroud)

上面的代码只为一个日期添加了一个图表,我在设计视图中添加了'chart1',而没有创建动态.但我想在运行时向网页添加更多动态图表.

谁能帮我这个?

我正在使用VS 2008,ASP.NET 3.5和图表库是:using System.Web.UI.DataVisualization.Charting;

Pro*_*ool 4

好吧,我可能做得太过分了,但我试图让它变得非常动态。是的,列表名称有点奇怪,但我使用了我的另一个示例来构建它。

 protected void Page_Load(object sender, EventArgs e)
 {
   Bench[] benchList;
   FoodIntake[] foodIntakeList;
   Panel panelChartHolder;

   panelChartHolder = new Panel();
   Controls.Add(panelChartHolder);

   benchList = Bench.GetAll();
   AddNewCharts(benchList, panelChartHolder, 
     GetBenchXValue, GetBenchYValue);

   foodIntakeList = FoodIntake.GetAll();
   AddNewCharts(foodIntakeList, panelChartHolder, 
     GetFoodIntakeXValue, GetFoodIntakeYValue);
  }
Run Code Online (Sandbox Code Playgroud)

好的,第一部分很简单。创建一个面板来保存您要添加的图表,获取您想要由图表表示的列表(在本示例中,它们恰好与 Linq to Sql 一起使用)并调用创建图表的方法。

  private void AddNewCharts<T>(T[] listToAdd, Panel panelToAddTo, 
     Func<T, DateTime> xMethod, Func<T, Int32> yMethod)
  {

    ChartArea mainArea;
    Chart mainChart;
    Series mainSeries;

    mainChart = new Chart();
    mainSeries = new Series("MainSeries");

    for (Int32 loopCounter = 0; loopCounter < listToAdd.Length; loopCounter++)
    {
      mainSeries.Points.AddXY(xMethod(listToAdd[loopCounter]), 
        yMethod(listToAdd[loopCounter]));
    }

    mainChart.Series.Add(mainSeries);
    mainArea = new ChartArea("MainArea");
    mainChart.ChartAreas.Add(mainArea);

    panelToAddTo.Controls.Add(mainChart);
  }
Run Code Online (Sandbox Code Playgroud)

如您所见,我刚刚创建了一个新图表,向其中添加了一个系列,并向其中添加了一个 ChartArea。下一部分几乎只是循环遍历集合并将其中的每个项目添加到列表本身。它使用传入的委托方法 (Func) 来获取 X 和 Y 值。

最后一部分包含负责从两个列表中获取 X 和 Y 值的四个方法。基本上我这样做是为了让图表创建方法尽可能通用。可能有点矫枉过正了。

  private DateTime GetBenchXValue(Bench currentBench)
  {
    return currentBench.DateLifted;
  }

  private Int32 GetBenchYValue(Bench currentBench)
  {
    return currentBench.BenchAmount;
  }

  private DateTime GetFoodIntakeXValue(FoodIntake currentIntake)
  {
    return currentIntake.DateEaten;
  }

  private Int32 GetFoodIntakeYValue(FoodIntake currentIntake)
  {
    return currentIntake.Calories;
  }
Run Code Online (Sandbox Code Playgroud)

因此,当您运行此程序时,您将得到两个并排的图表。请注意,它们将非常简单,因为可以设置数百万种不同的属性来改善外观。希望这就是您所要求的。

  using System;
  using System.Web.UI.DataVisualization.Charting;
  using System.Web.UI.WebControls;
Run Code Online (Sandbox Code Playgroud)