2012-02-10 81 views
3

我需要用数据填充馅饼这是一个查询结果(LINQ到SQL)DOTNET的HighCharts,填充了查询结果的馅饼

问题是我不能管理里面添加一个foreach此代码插入我的数据,而不是静态的火狐,Chrome,IE ECT的...

 protected void Page_Load(object sender, EventArgs e) 
     { 
      //RepeaterVersionsForPie.DataSource = DAaccess.LibDataVersion.LibDataVersion.GetNumberOfCompaniesUsingEachVersions(); 
      //RepeaterVersionsForPie.DataBind(); 

      var test = DAaccess.LibDataVersion.LibDataVersion.GetNumberOfCompaniesUsingEachVersions(); 

      Highcharts chart = new Highcharts("chart") 
.InitChart(new Chart { PlotShadow = false }) 
.SetTitle(new Title { Text = "Browser market shares at a specific website, 2010" }) 
.SetTooltip(new Tooltip { Formatter = "function() { return '<b>'+ this.point.name +'</b>: '+ this.percentage +' %'; }" }) 
.SetPlotOptions(new PlotOptions 
{ 
    Pie = new PlotOptionsPie 
    { 
     AllowPointSelect = true, 
     Cursor = Cursors.Pointer, 
     DataLabels = new PlotOptionsPieDataLabels 
     { 
      Color = ColorTranslator.FromHtml("#000000"), 
      ConnectorColor = ColorTranslator.FromHtml("#000000"), 
      Formatter = "function() { return '<b>'+ this.point.name +'</b>: '+ this.percentage +' %'; }" 
     }, 
     Point = new PlotOptionsPiePoint 
     { 
      Events = new PlotOptionsPiePointEvents 
      { 
       Click = "function() { alert (this.category +': '+ this.y); }" 

      } 
     } 

    } 
}) 
.SetSeries(new Series 
{ 
    Type = ChartTypes.Pie, 
    Name = "Browser share", 
    Data = new Data(new object[] 
              { 
               new object[] { "Firefox", 45.0 }, 
               new object[] { "IE", 26.8 }, 
               new DotNet.Highcharts.Options.Point 
               { 
                Name = "Chrome", 
                Y = 12.8, 
                Sliced = true, 
                Selected = true 
               }, 
               new object[] { "Safari", 8.5 }, 
               new object[] { "Opera", 6.2 }, 
               new object[] { "Others", 0.7 } 
              }) 
}); 
      ltrChart.Text = chart.ToHtmlString(); 







     } 

其实,我需要能够插入这样的事情:

foreach (var item in test) 
{ 
new object[] { item.name, item.count} 
} 

但没有按VS”让我做成功h的东西 在此先感谢您的帮助...

回答

3

您可以创建任何类型的扩展方法DAaccess.LibDataVersion.LibDataVersion.GetNumberOfCompaniesUsingEachVersions()返回并让它以饼状系列格式返回结果。

public static class DotNetHighChartsExtensions 
{ 
    public static object[] ToPieChartSeries(this WhateverThatTypeIs data) 
    { 
     var returnObject = new List<object>(); 

     foreach (var item in data) 
     { 
      returnObject.Add(new object[] { item.name, item.count}); 
     } 

     return returnObject.ToArray(); 
    } 
} 

然后在你的代码,你有你的静态代码,你只是将其替换为:

Data = new Data(test.ToPieChartSeries()) 

或者,你可以有ToPieChartSeries方法返回所寻求的Data对象通过Series对象。

虽然我没有使用过这个DotNet.HighCharts项目,但我已经为两个MVC项目创建了自己的HighCharts对象。从表面上看,它看起来像是我最终做了同样的事情:创建一个可以序列化为JSON并由HighCharts JavaScript库识别的.NET对象。

+0

嘿,你的解决方案让我解决了我的问题。我不得不稍微修改它,然后让它工作。谢谢您的帮助。我会给你赏金,但我把它放在别人的问题上。希望它对他们有用,并将其标记为已接受。 – Linger 2012-04-10 21:50:43

+0

我现在看到如何奖励赏金,但我必须等待24小时。 – Linger 2012-04-10 21:58:04

+1

在这里看到我的答案http://stackoverflow.com/questions/10074620/pass-a-list-of-series-to-setseries/10096108#10096108。正如我所指出的,我对DotNet.HighCharts项目并不熟悉,但是基于Linger的注释,该方法可能需要返回一个Series数组而不是一个对象数组。 – 2012-04-11 13:24:14

2
SetSeries(new Series { 
       Type = ChartTypes.Pie, 
       Data = new Data(test.Select(d => new { Name = d.name, Y = d.count }).ToArray()) 
      }) 
+0

这帮助了我。 – JBntis 2013-03-10 07:24:34