Если вы используете маленький linq, вы можете получить большую часть этого в одной строке.Используя сгруппированную коллекцию linq, вы можете получить отдельный список значений вместе с их счетчиками, а затем вывести результаты так, как вам нравится.Вот пример winforms, который вы можете вставить прямо в новый проект, чтобы начать работу:
Код, который я использовал для настройки теста:
'Create DataGridView and add it to the form
Dim dgv As New DataGridView With {
.Location = New Point(50, 50),
.Size = New Size(150, 300),
.AllowUserToAddRows = False
}
dgv.Columns.Add("Column1", "Column 1")
Me.Controls.Add(dgv)
'Put some test data in it
Dim testValues As String() = {"item1", "item1", "item2", "item2", "item2", "item2", "item3"}
For Each testValue As String In testValues
dgv.Rows.Add(New String() {testValue})
Next
Получение различных значений и их количества:
'Now to the question at hand...
Dim column1GroupedValues = dgv.Rows.OfType(Of DataGridViewRow).Select(Function(row) row.Cells(0).Value.ToString()).GroupBy(Function(x) x)
Dim outputString As New System.Text.StringBuilder
For Each grpVal In column1GroupedValues
outputString.Append(String.Format("{0} x {1}" & vbCrLf, grpVal.Count.ToString, grpVal.Key))
Next
MsgBox(outputString.ToString)
'Outputs:
'2 x item1
'4 x item2
'1 x item3
Вся магия происходит там, где мы создаем column1GroupedValues
.Мы говорим linq, чтобы получить значение первой ячейки в каждой строке, а затем сгруппировать их.Получив эту коллекцию, вы получите доступ к свойствам Key
и Count
каждой записи, которые вы можете отображать любым способом.