如何通过For Each循环动态填充Livecharts堆叠行图数据?
解决LiveCharts动态填充ChartValues的问题
我来帮你搞定这个动态填充的问题!你之前用静态数据直接初始化没问题,但动态循环填充时,关键是要先把Series和ChartValues的实例单独拎出来,再逐个添加数据,而不是一次性嵌套创建。下面是具体的分步解决方案:
1. 先初始化空的系列和集合
别把所有New都堆在一行里,先把SeriesCollection和两个StackedRowSeries单独实例化,并且给它们创建空的ChartValues,这样后续才能动态添加数据:
' 初始化系列集合 Dim chartSeries As New SeriesCollection() ' 创建"Faltantes"系列,先留空的ChartValues Dim faltantesSeries As New StackedRowSeries With { .StackMode = StackMode.Percentage, .DataLabels = True, .LabelPoint = Function(p) p.X.ToString(), .Title = "Faltantes", .Values = New ChartValues(Of Double)() } ' 创建"Respondidas"系列,同样留空的ChartValues Dim respondidasSeries As New StackedRowSeries With { .StackMode = StackMode.Percentage, .DataLabels = True, .LabelPoint = Function(p) p.X.ToString(), .Title = "Respondidas", .Values = New ChartValues(Of Double)() } ' 把两个系列添加到集合中 chartSeries.Add(faltantesSeries) chartSeries.Add(respondidasSeries)
2. 准备动态数据源并循环填充
假设你已经有了要填充的数据源(比如从数据库、列表或者其他地方获取的),用For Each循环把数据逐个添加到对应系列的ChartValues里:
' 示例数据源:这里可以替换成你实际的动态数据(比如从DataTable、API返回等) Dim faltantesData As List(Of Double) = New List(Of Double) From {67, 16, 41, 0, 7, 92, 3} Dim respondidasData As List(Of Double) = New List(Of Double) From {23, 1, 1, 4, 2, 102, 0} ' 填充Faltantes系列 For Each val In faltantesData faltantesSeries.Values.Add(val) Next ' 填充Respondidas系列 For Each val In respondidasData respondidasSeries.Values.Add(val) Next
3. 绑定到图表并刷新(如果需要)
最后把准备好的系列集合赋值给图表,要是用的WinForms,可能需要手动刷新图表确保UI更新;WPF的话只要你的ViewModel实现了INotifyPropertyChanged,绑定后会自动更新:
' 赋值给图表 grafico2.Series = chartSeries ' WinForms环境下可能需要手动刷新 grafico2.Refresh()
额外提示:如果数据源是DataTable的情况
要是你的数据来自数据库查询的DataTable,可以这样循环填充:
' 假设DataTable有两列:Faltante 和 Respondida For Each row As DataRow In yourDataTable.Rows ' 注意类型转换,确保是Double类型 faltantesSeries.Values.Add(CDbl(row("Faltante"))) respondidasSeries.Values.Add(CDbl(row("Respondida"))) Next
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

