Мне нужно перейти с одной серии на две серии - PullRequest
0 голосов
/ 22 ноября 2010

Мы используем dotNETCHARTING, чтобы изобразить наши диаграммы, они принимают Series для своих SeriesCollection.Это новая диаграмма, над которой я работаю, все предыдущие имеют соотношение 1: 1 между показанным значением и извлеченным значением.Теперь у меня есть список значений, который нужно отобразить в виде списка значений 12: 12.

В настоящее время у меня есть 2 списка данных, которые отображаются (фактические и бюджетные за последние 12 месяцев) - но в одном Series, где они должны быть 2 Series.У меня есть данные, отсортированные и перечисленные по мере необходимости, хорошо почти перечисленные справа.

Ограничения: .NET 3.5 (VS2008), dotNETCHARTING.

Это будет очень печальное решение, если мне придется создать12 SQL для каждого месяца и 12 для бюджета.Из того, что я вижу, в этом нет необходимости, как только я найду способ разделить каждый список на отдельный Series.

Каждый модуль имеет List<ModuleValue>, я попытался с Dictionary<int, List<ModuleValue>>, чтобыкаждая серия значений (12 месяцев) может иметь отдельный список.

Я пробовал Для каждого списка значений добавить каждое значение в списке к Series, повторять до тех пор, пока не выйдет список значений.(Foreach в Foreach)

Мой вопрос таков: может кто-нибудь дать мне несколько советов относительно возможного решения.График ниже, по-видимому, правильный, если не выстроились в очередь один за другим, но начинали и заканчивали в один и тот же период времени (месяц).Например, бюджет на январь сравнивается с фактическим на январь. Я не спрашиваю о модуле dotNETCHARTING, у них много помощи.Я спрашиваю об этом промежуточном звене и о том, как он подает данные в модуль.

Основное тело логики:

        protected override void CreateChildControls()
        {
            base.CreateChildControls();

            //_chart.Type = ChartType.Combo;
            _chart.DefaultSeries.Type = SeriesType.Line;

// Up for change - between here
            IList listSeries = new List();
            listSeries.Add(GetSeries(_module)); // This line should be listSeries = GetMultipleSeries(_module); or to that effect.

            foreach (var series in listSeries)
            {
                _chart.SeriesCollection.Add(series);
            }
// Up for change - and here

            // This shows the title above the chart:
            _chart.Title = _module.Title;
            // This shows the title below the chart:
            //_chart.XAxis.Label = new Label(_module.Title);

            _chart.TitleBox.Line.Color = Charter.BackgroundColor;

            base.SetAreaStyles();
            base.SetLinkUrl(_module.LinkUrl);
        }

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

        protected Series GetSeries(FrontModule module)
        {
            Series series = new Series(module.Title);

            foreach (var value in module.Values)
            {
                string sFieldTitle = value.Text;

                Element element = new Element(sFieldTitle, value.Value);

                element.Color = Charter.GetColor(value.ColorIndex);

                series.Elements.Add(element);

                string sToolTip = string.Format
                    ("{0}: {1:N0}"
                    , value.Tooltip
                    , value.Value);

                element.ToolTip = sToolTip;

                if (!string.IsNullOrEmpty(value.LinkUrl))
                {
                    element.URL = Page.ResolveUrl(value.LinkUrl);
                }

                ChartTooltip += string.Concat(sToolTip, ", ");
            }

            ChartTooltip += "\n";

            return series;
        }

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

        protected List GetMultipleSeries(FrontModule module)
        {
            List listSeries = new List();
            Series series = new Series(module.Title);

            foreach (var keyPair in module.DictionaryValues)
            {
                string sFieldTitle = keyPair.Value.Text;

                Element element = new Element(sFieldTitle, keyPair.Value.Value);

                element.Color = Charter.GetColor(keyPair.Value.ColorIndex);

                series.Elements.Add(element);

                string sToolTip = string.Format
                    ("{0}: {1:N0}"
                    , keyPair.Value.Tooltip
                    , keyPair.Value.Value);

                element.ToolTip = sToolTip;

                if (!string.IsNullOrEmpty(keyPair.Value.LinkUrl))
                {
                    element.URL = Page.ResolveUrl(keyPair.Value.LinkUrl);
                }

                ChartTooltip += string.Concat(sToolTip, ", ");

            }

            listSeries.Add(series);

            ChartTooltip += "\n";

            return listSeries;
        }

alt text

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

Буду признателен за все, что вы сможете добавить.Спасибо.

1 Ответ

1 голос
/ 22 ноября 2010

Вам нужно два Series объекта:

    protected List GetMultipleSeries(FrontModule module)
    {
        List listSeries = new List();
        Series seriesActual = new Series(module.Title);
        Series seriesBudgetted = new Series(module.Title);

        foreach (var keyPair in module.DictionaryValues)
        {
            string sFieldTitle = keyPair.Value.Text;

            Element element = new Element(sFieldTitle, keyPair.Value.Value);

            element.Color = Charter.GetColor(keyPair.Value.ColorIndex);

            // Is is actual or budgetted
            if (keyPair.Value.IsActual)
                seriesActual.Elements.Add(element);
            else
                seriesBudgetted.Elements.Add(element);

            string sToolTip = string.Format
                ("{0}: {1:N0}"
                , keyPair.Value.Tooltip
                , keyPair.Value.Value);

            element.ToolTip = sToolTip;

            if (!string.IsNullOrEmpty(keyPair.Value.LinkUrl))
            {
                element.URL = Page.ResolveUrl(keyPair.Value.LinkUrl);
            }

            ChartTooltip += string.Concat(sToolTip, ", ");

        }

        listSeries.Add(seriesActual);
        listSeries.Add(seriesBudgetted);

        ChartTooltip += "\n";

        return listSeries;
    }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...