我正在尝试使用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 };
}
}
答案 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
,而不是每次需要时都创建一个新的。