【问题标题】:Add dynamic charts using ASP.NET CHART CONTROL, c#使用 ASP.NET CHART CONTROL,c# 添加动态图表
【发布时间】:2020-04-30 04:25:25
【问题描述】:

我想在网页中添加动态图表。是这样的……

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

我从 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();

上面的代码只为一个日期添加了一个图表,我已经将“chart1”添加到设计视图中,它不是动态创建的。但我想在网页上添加更多运行时动态的图表。

谁能帮我解决这个问题?

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

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

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

     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);
      }
    

    好的,所以这第一部分很简单。创建一个面板来保存您正在添加的图表,获取您希望由图表表示的列表(对于本示例,它们恰好与 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);
      }
    

    如您所见,我刚刚创建了一个新图表,向其中添加了一个系列,并向其中添加了一个 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;
      }
    

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

      using System;
      using System.Web.UI.DataVisualization.Charting;
      using System.Web.UI.WebControls;
    

    【讨论】:

    • 我正在使用 sql,但我遇到了这条线 mainSeries.Points.AddXY("intervaltime", "Total");其中intervaltime,Total来自sql select查询。
    • 老实说,看起来您已经有了上面编写的其他代码。我只是将命令发送到方法中,而不是我所做的数据绑定,然后设置 .XValueMember/.YValueMember。您在自己的代码中拥有您需要的大部分内容。
    • 从我的帖子中得到的主要内容是如何动态添加图表。你已经弄清楚了数据绑定。
    【解决方案2】:
    protected void Page_Load(object sender, EventArgs e)
        {
            MySqlConnection UsageLogConn = new MySqlConnection("Server=localhost;UID=root;Password=;database=productactivation");
            UsageLogConn.Open();//open connection
    
            string sql = "select * from sales";
            DataSet ds = new DataSet();
            MySqlCommand cmd = new MySqlCommand(sql, UsageLogConn);
            MySqlDataAdapter mySQLadapter = new MySqlDataAdapter(cmd);
            mySQLadapter.Fill(ds);
            Chart1.DataSource = ds;
    
            // set series members names for the X and Y values 
            Chart1.Series["Series1"].XValueMember = "title_id";
            Chart1.Series["Series1"].YValueMembers = "qty";
            Chart1.Series["Series2"].XValueMember = "title_id";
            Chart1.Series["Series2"].YValueMembers = "qty";
            UsageLogConn.Close();
            // data bind to the selected data source
            Chart1.DataBind();
    
    
            cmd.Dispose();
    
        }
    

    【讨论】:

    【解决方案3】:

    我更新了 .NET 4.0 的 MS 图表示例并添加了两个额外的项目——ChartsWithMVC 和 ChartsWithoutWebForms。您可能会发现我的示例代码很有帮助,因为我使用 asp.net 图表控件实现了一个非常基本的动态图表系统:

    http://develocity.blogspot.com/2010/04/aspnet-chart-controls-without-web-forms.html

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2012-04-28
      • 1970-01-01
      • 2014-02-20
      • 1970-01-01
      • 2023-04-09
      • 2022-01-05
      • 2019-06-01
      • 1970-01-01
      • 2013-02-20
      相关资源
      最近更新 更多