如何使用微图xamarin表格绘制N个项目的列表

时间:2018-11-20 21:47:05

标签: c# foreach

我正在尝试使用xaml制作xamarin形式的图表,我想绘制“ n”个项目的列表,但是,它仅显示列表的最后一个项目,似乎条目中的数据已删除并替换了每次启动前的每次冰柱时间。

这是代码

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 :(得分:0)

您正在为每个项目创建一个新图表,这就是为什么您只获得最后一个项目的原因。

您应该将条目表移出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,而不是每次需要时都创建一个新的。