2012-02-10 79 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