DotNet HighCharts, заполняет круговую диаграмму результатом запроса - PullRequest
3 голосов
/ 10 февраля 2012

Мне нужно заполнить круговую диаграмму данными, которые являются результатом запроса (LINQ To SQL)

Проблема в том, что мне не удается добавить foreach внутри этого кода для вставки моих данных вместо статических Firefox, Chrome, IE и т. Д. ...

        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}
}

Но В.С. не позволяет мне делать такие вещи Заранее спасибо за помощь ...

Ответы [ 2 ]

3 голосов
/ 11 апреля 2012

Вы можете создать метод расширения для любого типа, который возвращает 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, я работал и создавал свои собственные объекты HighCharts для пары проектов MVC.На первый взгляд, похоже, что в конечном итоге я делаю то же самое: создаю объект .NET, который можно сериализовать как JSON и распознать в библиотеке JavaScript HighCharts.

2 голосов
/ 02 мая 2012
SetSeries(new Series {
                Type = ChartTypes.Pie,
                Data = new Data(test.Select(d => new { Name = d.name, Y = d.count }).ToArray())
            })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...