我们使用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
,重复直到超出值列表。 (Foreach
)中的Foreach
我的问题是:任何人都可以给我一些可能的解决方案。下面的图表是正确的,如果没有一个接一个排队,但是在同一时间段(月)开始和结束。例如Jan的预算与Jan的实际比较。我不是在询问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; }
这不应该是这样,将数据列在等值行中。虽然它显示它具有所有必需的数据。
我很感激您可以添加的任何内容。谢谢。
答案 0 :(得分: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语句中的点是实际的还是预算的。