Buenas tardes, estoy atascado.
Estoy tratando de hacer un programa que me muestre, en un ListView, todos los numeros que aparezcan en otros 3 ListView donde tengo numero repartidos 3 ListView distintos (los 3 con 6 filas)
Lo graficaré un poco:
ListView1 ListView2 ListView3
Posicion / Numero Posicion / Numero Posicion / Numero
1 3 1 2 1 3
2 7 2 6 2 2
3 7 3 6 3 9
4 2 4 3 4 9
5 6 5 2 5 7
6 7 6 6 6 7
ListView4
Numero / Cantidad
2 4
3 3
6 4
7 5
9 2
Bueno, algo así. En donde en el ListView4 es donde estará los numero que aparecen y la cantidad.
Yo intenté anidando varios FOR pero la verdad es que me hice un lío.
Espero que me puedan entender el ejemplo y si me pueden orientar, les agradecería.
Saludos
Puedes utilizar LINQ de la siguiente manera para simplificar el uso de varios búcles/For. De todas formas, todo resultaría más dinámico si en lugar de un ListView adaptases tu código para utilizar un DataGridView enlazando datos de origen en la propiedad DataGridView.DataSource.
(https://i.imgur.com/BBZVIeR.png)
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim columnIndex As Integer = 0
' Unión entre las colecciones de elementos de ListView1, ListView2 y ListView3.
Dim items As ListViewItem() =
({Me.ListView1.Items.Cast(Of ListViewItem),
Me.ListView2.Items.Cast(Of ListViewItem),
Me.ListView3.Items.Cast(Of ListViewItem)
}.SelectMany(Function(sequence) sequence)
).ToArray()
' Agrupación de los elementos mediante pares de clave-valor (clave=texto del elemento, valor=cantidad de repeticiones).
Dim groups As KeyValuePair(Of String, Integer)() =
(From item As ListViewItem In items
Let key As String = item.SubItems(columnIndex).Text
Order By key Ascending
Group By key Into keys = Group
Select New KeyValuePair(Of String, Integer)(key, keys.Count())
).ToArray()
' Creación de nuevos elementos para añadir en el ListView4.
Dim newItems As ListViewItem() =
(From group As KeyValuePair(Of String, Integer) In groups
Select New ListViewItem({group.Key, CStr(group.Value)})
).ToArray()
' Adición de los nuevos elementos al ListView4.
With Me.ListView4
.BeginUpdate()
.Items.Clear()
.Items.AddRange(newItems)
.EndUpdate()
End With
End Sub
End Class
Nótese que en la linea nº 21 del código de arriba, si lo prefieres puedes cambiar el tipo de retorno para devolver un array del tipo ListViewItem directamente.
Saludos.