Problema en Basic Net

limamua

Bovino maduro
#1
Tengo una lista y un DataGridView, las dos tienen una lista, y quiero comparar el primer campo del DGV con los elementos de la lista, y los que existan en ambos, eliminarlos de la lista. Esto lo solucione con este codigo

If DGEmpleadoEnfermedad.Rows.Count <= 1 Then
Return
Else
For V1 As Integer = 0 To DGEmpleadoEnfermedad.Rows.Count
For V2 As Integer = 0 To LBEnfermedades.Items.Count
If DGEmpleadoEnfermedad.Rows(0).Cells(V1).Value.ToString.Trim = LBEnfermedades.Items.Item(V2).ToString Then
LBEnfermedades.Items.RemoveAt(V2)
Exit For
End If
Next V2
Next V1
End If

El problema, segun creo, es que como el ir eliminando los elementos de la lista, el LBEnfermedades.items.count deberia cambiar, sin embargo me ocurre un desbordamiento, por el mal direccionamiento de indices, osea apunta a un elemento que no existe, como controlo ese problema? Osea que conforme van reduciendo el numero de elementos en la lista, el contador sube a mas de la cantidad, y no me lo valida el for


AAhhhh, ayuda! ja ja ja :mota:
 

elfedecafe

Bovino maduro
#2
Mm, solamente tendrías que aumentar en uno el indice de V1 o V2 cuando elmines alguno, creo que seria mejor en un ciclo Do While, asignarias una variable para cada count.

If DGEmpleadoEnfermedad.Rows(0).Cells(V1).Value.ToString.Trim = LBEnfermedades.Items.Item(V2).ToString Then
LBEnfermedades.Items.RemoveAt(V2)
VARIABLE -=1
ExitFo
 
#3
El ciclo que determinas al inicio cambia al momento de eliminar un registro.
Intenta hacer el ciclo del ultimo registro al primero. Con esto, al eliminar un registro afecta unicamente a la parte que ya analisaste y no al limite que vas analizar.
 
Arriba