Добавление динамических диаграмм с помощью ASP.NET CHART CONTROL, C#

Я хотел добавить на веб-страницу динамические диаграммы. Это так ...

Я получаю от пользователя дату начала и окончания и рисую отдельные диаграммы для каждой даты между датой начала и окончания.

Я получаю данные из базы данных 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();

Приведенный выше код добавляет только одну диаграмму для одной даты, и я добавил диаграмму 1 в представление дизайна, а не созданную динамическую. Но я хотел добавить на веб-страницу больше динамических диаграмм во время выполнения.

Кто-нибудь может мне с этим помочь?

Я использую VS 2008, ASP.NET 3.5 а библиотека для построения графиков: using System.Web.UI.DataVisualization.Charting;

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
27 789
3

Ответы 3

Хорошо, возможно, я переборщил, но я попытался сделать это довольно динамичным. Да, названия списков немного странные, но я использовал другой свой пример, чтобы построить это.

 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.

dhareni 03.12.2008 19:48

Честно говоря, похоже, что у вас уже есть другой код, который вам нужен, с тем, что вы написали выше. Я бы просто отправил команду в метод вместо того, что я сделал, привязку данных, а затем установил бы .XValueMember / .YValueMember. У вас есть большая часть того, что вам нужно, в вашем собственном коде.

Programmin Tool 03.12.2008 20:02

Главное, что нужно сделать из моего поста, - это как динамически добавлять диаграммы. Вы уже выяснили привязку данных.

Programmin Tool 03.12.2008 20:03

Я обновил образцы диаграмм MS для .NET 4.0 и добавил два дополнительных проекта - ChartsWithMVC и ChartsWithoutWebForms. Вы можете найти мой пример кода полезным, так как у меня очень простая реализация системы динамических диаграмм с использованием элемента управления диаграммой asp.net:

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

Надеюсь, это поможет.

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

    }

И DataSource, и DataSourceID определены в <control>, эта ссылка помогла мне: jibrankhan.wordpress.com/2008/06/18/…

dgamma3 08.02.2013 02:18

Другие вопросы по теме