Как составить список из N элементов, используя микрочарты xamarin формы - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь сделать диаграмму в формах xamarin, используя xaml, и я хочу построить диаграмму из списка «n» элементов, но он отображает только последний элемент списка, кажется, что данные в записи удаленыи заменил каждый раз, когда цикл foreEach заканчивается.

это код

if (ID != "")
{
    Empresa empresa = App.BD.ObtenerEmpresa(ID);
    var reportes = App.BD.ObtenerReportes(ID);

    foreach (var CurrentData in reportes)
    {
        var random = new Random();
        var color = String.Format("#{0:X6}", random.Next(0x1000000));
        var entries = new[]
        {
            new Entry(float.Parse(CurrentData.Mejora))
            {
                Label = CurrentData.FechaReporte.ToString(),
                Color = SKColor.Parse(color),
                ValueLabel = CurrentData.Mejora
            }
        };

        chart1.Chart = new DonutChart() { Entries = entries };
    }
}

1 Ответ

0 голосов
/ 21 ноября 2018

Вы создаете новую диаграмму для каждого элемента, поэтому вы получаете только последний элемент.

Что вам нужно, это вывести диаграмму входа из цикла for и создать ее один раз свсе записи:

if (ID != "")
{
    Empresa empresa = App.BD.ObtenerEmpresa(ID);
    var reportes = App.BD.ObtenerReportes(ID);
    var random = new Random();

    chart1.Chart = new DonutChart()
    {
        Entries = reportes
            .Select(x => new Entry(float.Parse(x.Mejora))
            {
                Label = x.FechaReporte.ToString(),
                Color = SKColor.Parse($"#{random.Next(0x1000000):X6}"),
                ValueLabel = x.Mejora
            })
            .ToArray()
    };
}

Вот более простая версия, которая поможет вам понять: (оба эквивалентны)

if (ID != "")
{
    Empresa empresa = App.BD.ObtenerEmpresa(ID);
    var reportes = App.BD.ObtenerReportes(ID);

    var random = new Random();
    var entries = new List<Entry>();
    foreach (var CurrentData in reportes)
    {
        var color = String.Format("#{0:X6}", random.Next(0x1000000));

        entries.Add(new Entry(float.Parse(CurrentData.Mejora))
        {
            Label = CurrentData.FechaReporte.ToString(),
            Color = SKColor.Parse(color),
            ValueLabel = CurrentData.Mejora
        });
    }

    chart1.Chart = new DonutChart() { Entries = entries };
}

примечание: вы должны также использовать тот же Random вместосоздавать новый каждый раз, когда вам это нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...