Столбчатая диаграмма с накоплением C # в классе Controller - PullRequest
0 голосов
/ 30 августа 2018

Итак, моя проблема заключается в следующем. Мне нужно вставить столбчатую диаграмму с накоплением в веб-приложение. С ним не будут взаимодействовать, его нужно лишь периодически отображать и обновлять.

По сути, это был код, который я имел в классе контроллера для создания простой гистограммы.

public ActionResult CharterHelp(int _completed, int _remaining)
{
    var workChart = new System.Web.Helpers.Chart(300, 500).AddTitle("Work Items");
    workChart .AddSeries(chartType: "column",
               xValue: new[] { "Completed", "Remaining" },
               yValues: new[] { _completed, _remaining })
               .Write("png");

    return null;
}

Этот предыдущий код работал. Тем не менее, мне нужно представить его в виде столбца с накоплением и ... мне было трудно получить четкий ответ или руководство о том, как сделать хотя бы базовый ответ без использования проприетарного программного обеспечения для построения диаграмм.

Все те, что я нашел для простых C # и ASP.net, помогли мне до некоторой степени, но я не нашел тот, который дает мне эквивалентный код ".write (png)".

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

Это примерно столько, сколько я получил с обновленным кодом, и буду признателен за любую помощь по этому вопросу.

public ActionResult CharterHelp(int _completed, int _remaining)
{
    System.Web.UI.DataVisualization.Charting.Chart workChart = new System.Web.UI.DataVisualization.Charting.Chart();

    var seriesCompleted = new System.Web.UI.DataVisualization.Charting.Series
    {
            Name = "Completed",
            Color = System.Drawing.Color.Green,
            IsVisibleInLegend = false,
            IsXValueIndexed = true,
            ChartType = SeriesChartType.StackedColumn
    };
    var seriesRemaining = new System.Web.UI.DataVisualization.Charting.Series
    {
            Name = "Remaining",
            Color = System.Drawing.Color.Red,
            IsVisibleInLegend = false,
            IsXValueIndexed = true,
            ChartType = SeriesChartType.StackedColumn
    };

    workChart.Series.Add(seriesCompleted);
    workChart.Series.Add(seriesRemaining);

    seriesRemaining.Points.AddY(_completed);
    seriesCompleted.Points.AddY(_remaining);

    var chartArea1 = new System.Web.UI.DataVisualization.Charting.ChartArea
    {
            Name = "ChartArea1"
    };

    workChart.ChartAreas.Add(chartArea1);
    workChart.Width = 300;
    workChart.Height = 500;

    System.IO.MemoryStream imageStream = new System.IO.MemoryStream();
    workChart.SaveImage(imageStream, ChartImageFormat.Png);
    return null;
}

1 Ответ

0 голосов
/ 31 августа 2018

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

Чтобы сделать то, что я пытался сделать, мне нужно было иметь следующий код в конце метода actionresult в классе контроллера:

        System.IO.MemoryStream chartStream = new System.IO.MemoryStream();
        workChart.SaveImage(chartStream, ChartImageFormat.Png);
        return File(chartStream.ToArray(), ("chart/png"));
...