ors ha scritto:
Scusate la mia risposta cosi in ritardo, allora io per confrontare la datagrid e la listview uso il seguente codice, ma non funziona…
For i = 0 To ListView1.Items.Count - 1
For j = 0 To DataGridView4.RowCount - 1
Dim riga As Integer = j, col = 0
If ListView1.Items(i).SubItems(0).Text = DataGridView1.Rows(riga).Cells(col).ToString Then
cont = cont + 1
End If
Next
ListView1.Items(i).SubItems(1).Text = cont
cont = 0
Next
Ecco la soluzione completa!
Prova questo codice che ho fatto da 0 e che funziona, rimuovi il
msgbox che ti guida passo-passo dopo aver compreso il meccanismo della procedura.
'############################
'CURSORE
'9-10-2018
'Soluzione lista nomi univoci
'############################
'Inserire in un Form1 un oggetto DataGridView, un ListView e 2 Pulsanti.
Public Class Form1
Public Nome As String 'Variabile per i campi
Public Eta As Integer 'Variabile per i campi
Public NomiPresenti() As String 'Insieme dei nomi predefiniti
Public EtaPresenti() As Integer 'Insieme delle età predefinite
Public NRiga As Integer 'Contatore delle righe
Private Sub BT_PopolaDG_Click(sender As Object, e As EventArgs) Handles BT_PopolaDG.Click
'Rimuovo le colonne
If DGV_ElencoDati.ColumnCount > 0 Then
DGV_ElencoDati.Columns.Remove("Col0")
DGV_ElencoDati.Columns.Remove("Col1")
DGV_ElencoDati.Columns.Remove("Col2")
End If
'Rimuovo tutte le righe se sono già presenti
If DGV_ElencoDati.RowCount > 0 Then
For Each Riga As DataRow In DGV_ElencoDati.Rows()
Riga.Delete() 'Elimino la riga
Next
End If
' Aggiungo le colonne all'oggetto DGV_ElencoDati
DGV_ElencoDati.Columns.Add("Col0", "NRiga")
DGV_ElencoDati.Columns.Add("Col1", "Nome")
DGV_ElencoDati.Columns.Add("Col2", "Eta")
'Popolo l'oggetto con dati casuali
NRiga = 0
For a = 0 To 10
NRiga = NRiga + 1
Nome = NomiPresenti(Int(Rnd(1) * 5) + 1)
Eta = EtaPresenti(Int(Rnd(1) * 10) + 1)
'MsgBox(DGV_ElencoDati.Rows.Count().ToString())
DGV_ElencoDati.Rows.Add()
DGV_ElencoDati.Rows.Item(a).Cells(0).Value = NRiga.ToString()
DGV_ElencoDati.Rows.Item(a).Cells(1).Value = Nome.ToString()
DGV_ElencoDati.Rows.Item(a).Cells(2).Value = Eta
Next
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Randomize(Date.Now.Second)
'Inizializza la lista dei nomi
NomiPresenti = {"aa", "bb", "cc", "dd", "ee", "ff"}
MsgBox("Nomi =" + NomiPresenti(2))
EtaPresenti = {"40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50"}
'Popola casualmente l'oggetto DataGridView chiamato DGV_ElencoDati
End Sub
Private Sub BT_RiportaNomiUnivoci_Click(sender As Object, e As EventArgs) Handles BT_RiportaNomiUnivoci.Click
If DGV_ElencoDati.Rows.Count < 1 Then Exit Sub 'Esce dalla sub perchè l'elenco è vuoto
'Rimuovo tutte le righe se sono già presenti
If LV_NomiUnivoci.Items.Count > 0 Then
For Each R As ListViewItem In LV_NomiUnivoci.Items
R.Remove() 'Rimuovo la riga
Next
End If
'Rimuovo le colonne
If LV_NomiUnivoci.Columns.Count > 0 Then
LV_NomiUnivoci.Columns.RemoveAt(3)
LV_NomiUnivoci.Columns.RemoveAt(2)
LV_NomiUnivoci.Columns.RemoveAt(1)
LV_NomiUnivoci.Columns.RemoveAt(0)
End If
' Aggiungo le colonne all'oggetto LG_NomiUnivoci
LV_NomiUnivoci.Columns.Add("Col0", "NRiga")
LV_NomiUnivoci.Columns.Add("Col1", "Nomi")
LV_NomiUnivoci.Columns.Add("Col2", "eta")
LV_NomiUnivoci.Columns.Add("Col3", "Occorrenze")
Dim Occorrenze As Integer
Dim Campo(4) As String
Dim NomeDaConfrontare As String = ""
'Popolo l'oggetto con dati filtrati (Solo nomi univoci + quantità delle Occorrenze)
'1) Leggo la prima riga dal DGV_ElencoDati e l'aggiungo alla lista LV_NomiUnivoci
NRiga = 0 ' Contatore delle varietà dei nomi non ripetuti che occuperanno le nuove righe nella lista
Nome = DGV_ElencoDati.Rows(0).Cells(1).Value.ToString()
Eta = DGV_ElencoDati.Rows(0).Cells(2).Value.ToString()
NRiga = NRiga + 1 'Contatore delle nuove righe della lista
Campo(0) = NRiga.ToString()
Campo(1) = Nome.ToString()
Campo(2) = Eta.ToString()
Campo(3) = "1"
Dim MiaNuovaRiga = New ListViewItem(Campo)
LV_NomiUnivoci.Items.Add(MiaNuovaRiga) 'Aggiunge una nuova riga di campi
'2) Leggo le sucessive righe dal DGV_ElencoDati e l'aggiungo alla lista LV_NomiUnivoci filtrandole
For a = 0 + 1 To DGV_ElencoDati.RowCount - 2
Occorrenze = 1 'Inizializzo il contatore delle Occorrenze per questo nome
NomeDaConfrontare = DGV_ElencoDati.Rows(a).Cells(1).Value.ToString()
Eta = DGV_ElencoDati.Rows(a).Cells(2).Value.ToString()
'Se l'oggetto lista ha almeno una riga allora
If LV_NomiUnivoci.Items.Count > 0 Then
'Scorro tutte le righe per confrontare se c'è già in lista
For b = 0 To LV_NomiUnivoci.Items.Count - 1
'Riga As ListViewItem In LV_NomiUnivoci.Items
If LV_NomiUnivoci.Items(b).SubItems(1).Text.ToString() = NomeDaConfrontare Then
LV_NomiUnivoci.Items(b).SubItems(1).Text = LV_NomiUnivoci.Items(b).SubItems(1).Text
LV_NomiUnivoci.Items(b).SubItems(2).Text = LV_NomiUnivoci.Items(b).SubItems(2).Text + " ; " + DGV_ElencoDati.Rows(a).Cells(2).Value.ToString()
LV_NomiUnivoci.Items(b).SubItems(3).Text = (Int(Val(LV_NomiUnivoci.Items(b).SubItems(3).Text.ToString()) + 1)).ToString()
LV_NomiUnivoci.Refresh()
MsgBox("INFORMAZIONE PASSO-PASSO:" + vbCrLf + "a= " + a.ToString() + vbCrLf + "Nome da confrontare = " + NomeDaConfrontare + vbCrLf + " LV_NomiUnivoci.Items(b).SubItems(1).Text = " + LV_NomiUnivoci.Items(b).SubItems(1).Text.ToString() + vbCrLf + vbCrLf + "Premere ok per continuare")
Occorrenze = Occorrenze + 1 'Qui non funge da contatore ma da interruttore, indica che è stato riscontrato un doppione
End If
Next b 'Fine For tra le ighe della lista
End If
'Se non ci sono Occorrenze aggiungo una nuova riga alla lista LV_NomiUnivoci
If Occorrenze <= 1 Then
NRiga = NRiga + 1 'Contatore delle nuove righe della lista
Campo(0) = NRiga.ToString()
Campo(1) = NomeDaConfrontare.ToString()
Campo(2) = Eta.ToString()
Campo(3) = Occorrenze.ToString()
MiaNuovaRiga = New ListViewItem(Campo)
LV_NomiUnivoci.Items.Add(MiaNuovaRiga)
End If
Next a
End Sub
End Class