【问题标题】:I need to move from One Series to Two Series我需要从一个系列转到两个系列
【发布时间】:2011-05-13 19:55:09
【问题描述】:

我们使用 dotNETCHARTING 来描绘我们的图表,他们接受 Series 作为他们的 SeriesCollection。这是我正在处理的一个新图表,所有以前的图表在显示的值和提取的值之间都有 1:1 的关系。现在我有一个值列表显示为值列表 12:12。

我目前有我的 2 个数据列表(过去 12 个月的实际与预算) - 但在一个 Series 中,它们应该是 2 Series。我根据需要对数据进行了排序和列出,几乎列出正确。

限制:.NET 3.5 (VS2008)、dotNETCHARTING。

如果我必须为每个月创建 12 个 SQL 并为预算创建 12 个 SQL,这将是一个非常可悲的解决方案。据我所知,这是没有必要的,只要我找到一种方法将每个列表分成单独的Series

每个模块都有一个List<ModuleValue>,我尝试使用Dictionary<int, List<ModuleValue>>,这样每个系列的值(12 个月)都可以有一个单独的列表。

我已经尝试了对于每个值列表,将列表中的每个值添加到 Series,重复直到超出值列表。 (ForeachForeach 中)

我的问题是:谁能给我一些可能的解决方案的指示。如果没有一个接一个地排列,而是在同一时间范围(月)开始和结束,则下面的图表是正确的。例如,一月的预算与一月的实际预算相比。我不是在询问 dotNETCHARTING 模块,他们有很多帮助。我在问这个中间以及它如何将数据提供给模块。

主逻辑体:

受保护的覆盖无效 CreateChildControls() { base.CreateChildControls(); //_chart.Type = ChartType.Combo; _chart.DefaultSeries.Type = SeriesType.Line; // 改变 - 在这里之间 IList listSeries = new List(); listSeries.Add(GetSeries(_module)); // 这一行应该是 listSeries = GetMultipleSeries(_module);或达到那个效果。 foreach(listSeries 中的 var 系列) { _chart.SeriesCollection.Add(series); } // 准备改变 - 在这里 // 这显示图表上方的标题: _chart.Title = _module.Title; // 这显示图表下方的标题: //_chart.XAxis.Label = new Label(_module.Title); _chart.TitleBox.Line.Color = Charter.BackgroundColor; base.SetAreaStyles(); base.SetLinkUrl(_module.LinkUrl); }

这个逻辑是旧的逻辑,应该保持原样 - 因为所有其他图表都依赖它。 可以作为参考点。认为这个逻辑被锁定了。

受保护系列 GetSeries(FrontModule 模块) { 系列系列 = 新系列(模块。标题); foreach(module.Values 中的 var 值) { 字符串 sFieldTitle = value.Text; 元素 element = new Element(sFieldTitle, value.Value); element.Color = Charter.GetColor(value.ColorIndex); series.Elements.Add(元素); 字符串 sToolTip = string.Format ("{0}: {1:N0}" , value.Tooltip ,价值。价值); element.ToolTip = sToolTip; if (!string.IsNullOrEmpty(value.LinkUrl)) { element.URL = Page.ResolveUrl(value.LinkUrl); } ChartTooltip += string.Concat(sToolTip, ", "); } 图表工具提示 += "\n"; 返回系列; }

这是新的逻辑,应进行更改以反映所需的逻辑。尽可能免费。

protected List GetMultipleSeries(FrontModule 模块) { 列表 listSeries = new List(); 系列系列 = 新系列(模块。标题); foreach(模块中的 var keyPair.DictionaryValues) { 字符串 sFieldTitle = keyPair.Value.Text; 元素 element = new Element(sFieldTitle, keyPair.Value.Value); element.Color = Charter.GetColor(keyPair.Value.ColorIndex); series.Elements.Add(元素); 字符串 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); 图表工具提示 += "\n"; 返回列表系列; }

这是不应该的,在一个单独的行中列出数据。虽然它显示它拥有所有必需的数据。

如果您能添加任何内容,我将不胜感激。谢谢。

【问题讨论】:

    标签: c# .net charts logic


    【解决方案1】:

    你需要两个 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 语句的点是实际的还是预算的。

    【讨论】:

    • 哦,你在说什么。让我测试一下。干杯。
    • @DoStuffZ:很高兴我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 2015-09-02
    • 2020-09-15
    • 2020-05-29
    • 1970-01-01
    • 2020-09-10
    • 2023-03-06
    • 1970-01-01
    • 2017-01-10
    相关资源
    最近更新 更多