如果你想要一个帕累托图,你想按名称分组,取每组的总和,也取每组的累积总和。您可以在 LINQ 中完成所有这些操作,但我会提醒您不要直接在 DataGridView 中使用数据:您应该让数据远离 UI。但是这个解决方案是根据您的设计使用 LINQ 来完成的。
Dim sums = DataGridView1.Rows.OfType(Of DataGridViewRow).
GroupBy(Function(d As DataGridViewRow) d.Cells().Item("Column14").Value.ToString()).
Select(Function(g) New KeyValuePair(Of String, Decimal)(g.Key, g.Sum(Function(rs) CDec(rs.Cells().Item("Column11").Value)))).
OrderByDescending(Function(kvp) kvp.Value)
Dim pareto = sums.Select(Function(kvp, i) New ParetoData(kvp.Key, kvp.Value, sums.Take(i + 1).Select(Function(kvp1) kvp1.Value).Sum()))
ComboBox1.DataSource = pareto.Select(Function(p) $"Name:{p.Key}, Sum:{p.Sum}, Cum:{p.Cumulative}").ToList()
它需要这个类来保存提到的数据。
Public Class ParetoData
Public Sub New(key As String, sum As Decimal, cumulative As Decimal)
Me.Key = key
Me.Sum = sum
Me.Cumulative = cumulative
End Sub
Public Property Key As String
Public Property Sum As Decimal
Public Property Cumulative As Decimal
End Class
为了在没有你的数据的情况下进行测试,我制作了自己的数据和类来保存它
Public Class Data
Public Sub New(column14 As String, column11 As Decimal)
Me.Column11 = column11
Me.Column14 = column14
End Sub
Public Property Column11 As Decimal
Public Property Column14 As String
End Class
在运行上面的解决方案代码之前,我像这样填充了网格
Dim gridRows As New List(Of Data)()
gridRows.Add(New data("D", 4))
gridRows.Add(New data("H", 1))
gridRows.Add(New data("E", 5))
gridRows.Add(New data("F", 2))
gridRows.Add(New data("G", 5))
gridRows.Add(New data("H", 8))
gridRows.Add(New data("G", 3))
gridRows.Add(New data("A", 1))
gridRows.Add(New data("B", 3))
gridRows.Add(New data("D", 2))
gridRows.Add(New data("J", 1))
gridRows.Add(New data("H", 2))
gridRows.Add(New data("E", 7))
gridRows.Add(New data("F", 6))
gridRows.Add(New data("G", 3))
gridRows.Add(New data("A", 1))
gridRows.Add(New data("B", 1))
gridRows.Add(New data("E", 1))
gridRows.Add(New data("F", 4))
gridRows.Add(New data("G", 2))
gridRows.Add(New data("G", 6))
gridRows.Add(New data("A", 1))
gridRows.Add(New data("I", 1))
gridRows.Add(New data("C", 3))
gridRows.Add(New data("G", 3))
gridRows.Add(New data("A", 1))
gridRows.Add(New data("B", 3))
gridRows.Add(New data("D", 2))
gridRows.Add(New data("B", 1))
gridRows.Add(New data("D", 2))
gridRows.Add(New data("H", 3))
gridRows.Add(New data("E", 9))
DataGridView1.DataSource = gridRows
然后把结果放到ComboBox中,是这样的