Подтвердить что ты не робот

Диаграмма в ASP.Net MVC 3

Я использую Chart web helper в ASP.Net MVC 3. Я видел ряд блестящих изображений в Интернете, показывающих возможности этого API, но вряд ли есть какая-либо документация о том, как создавать диаграммы. Например, мне нужно отображать ярлыки вне диаграммы, я бы хотел указать процент, а не десятичные значения и т.д.

Существует проект webforms для загрузки: http://weblogs.asp.net/scottgu/archive/2010/02/07/built-in-charting-controls-vs-2010-and-net-4-series.aspx и очень простая документация классов, в которой объясняется, как назначать значения и указывать основные размеры.

Я понимаю, что в MVC 3 еще не опубликованы книги, но наверняка должна быть какая-то документация, объясняющая, как использовать этот инструмент?

Спасибо

EDIT:

Из того, что я прочитал, ASP.Net MVC 3 либо отступил на шаг назад с помощью инструмента построения диаграмм, удалив возможность рисовать диаграммы, либо вообще не документировался. Вышел через эту статью: http://forums.asp.net/t/1620783.aspx/1?ASP+NET+MVC+3+Beta+Chart+Helper+Styling+Please+Help+, там очень похожая проблема.

ИЗМЕНИТЬ 2: Похоже, что Microsoft частично реализовала функциональность MSCharts в MVC 3. Чтобы использовать MSCharts, сборку System.Web.DataVisualization необходимо импортировать и зарегистрировать в файле web.configuration. Т

Таким образом, запросы отправляются из представления в контроллеры. Контроллеры генерируют изображение графика и возвращают результат изображения. Результат отображается в представлении. Это полезно, поскольку оно обеспечивает какое-то разделение. Я до сих пор не понимаю, почему System.WebHelpers.Chart еще не предлагает эту функцию, но, надеюсь, она будет рассмотрена в ближайшем будущем.

ИЗМЕНИТЬ 3: Мало других моментов. Не создавайте свои графики в представлении - они должны обслуживаться контроллером. Если вы решите использовать представления для построения графиков, убедитесь, что вы обновили web.config в папке Views, чтобы включить <add namespace="System.Web.UI.DataVisualization"/> в раздел пространства имен. Имена узлов и пространств имен немного запутанны. Сборка называется: System.Web.DataVisualization, когда пространство имен называется System.Web.UI.DataVisualization. Наконец, я считаю, что API диаграмм отлично, он служит для изображений, что означает, что диаграммы будут доступны из всех веб-браузеров. Качество графиков велико. Я посмотрел на такие альтернативы, как Fusion Charts, HighCharts и несколько других графических карт jQuery/JavaScript/Flash. Все они пытаются взять от вас 300-1000 фунтов стерлингов, не пытаясь удовлетворить самые основные потребности разработчиков.

4b9b3361

Ответ 1

Элементы управления диаграммой основаны на ранее выделенном проекте под названием MS Chart.

Блог Алексея Горева (разработчик MSFT для проекта): http://blogs.msdn.com/b/alexgor/

Форумы MS Chart: http://social.msdn.microsoft.com/Forums/en-US/MSWinWebChart/

Документация по MSDN: http://msdn.microsoft.com/en-us/library/dd456632(VS.100).aspx

Посты кажутся немного устаревшими, но API практически одинаково между MS Chart и новыми библиотеками визуализации данных.

Чтобы обратиться к своим примерным вопросам:

1) Чтобы отображать метки вне диаграммы, каждый объект Series имеет массив свойств словаря.

series["PieLabelStyle"] = "Outside";

2) Чтобы указать проценты, а не необработанные значения, свойство Label Series объекта принимает строку форматирования.

series.Label = "#PERCENT{P0}"

Эти пользовательские атрибуты доступны в http://msdn.microsoft.com/en-us/library/dd456764.aspx.

EDIT: добавление примера кода

Хорошо, вот полный пример кода. Я использую System.Web.DataVisualization v4.0.0.0, поэтому это должно быть текущим с MVC 3. Перечисленный выше Series не является фактическим Chart.Series свойствами (a SeriesCollection). Это индивидуальный Series, который вы добавляете в эту коллекцию.

public ActionResult TestForSOExample()
{
  // slug in some data
  var data = new Dictionary<string, float>
        {
            {"test", 10.023f},
            {"test2", 20.020f},
            {"test3", 19.203f},
            {"test4", 4.039f},
            {"test5", 5.343f}
    };


  var chart = new Chart();

  var area = new ChartArea();
  // configure your chart area (dimensions, etc) here.
  chart.ChartAreas.Add(area);

  // create and customize your data series.
  var series = new Series();
  foreach (var item in data)
  {
        series.Points.AddXY(item.Key, item.Value);
    }
  series.Label = "#PERCENT{P0}";
  series.Font = new Font("Segoe UI", 8.0f, FontStyle.Bold);
  series.ChartType = SeriesChartType.Pie;
  series["PieLabelStyle"] = "Outside";

  chart.Series.Add(series);

  var returnStream = new MemoryStream();
  chart.ImageType = ChartImageType.Png;
  chart.SaveImage(returnStream);
  returnStream.Position = 0;
  return new FileStreamResult(returnStream, "image/png");
}

При вызове действия контроллера вам будут представлены следующие изображения.

example image from controller action

Ответ 2

Я бы рекомендовал отображать диаграммы на клиенте, а на сервере, на самом деле, сервер должен использоваться для вытаскивания данных. Для этого я использовал smth, например google charts. Но если вы действительно решили вытащить диаграммы с сервера, изображения будут конкретными, то проще всего использовать вышеупомянутый подход - класс диаграммы. Но один из недостатков этого подхода заключается в том, что для этого нет дизайнера, но на самом деле, как я выяснил, если вы создаете приложение WinForms и перетаскиваете элемент управления диаграммами, это точно так же, и для этого есть дизайнер, все, что вы необходимо скопировать/вставить созданный разработчиком код и при необходимости записать некоторую логику обработки. Это облегчает жизнь.