2014-11-02 123 views
0

我在代码片段中遇到了一些问题,我正在尝试将一个项目添加到我成功执行的dataTable中,但是我注意到如果我尝试添加系统允许的相同元素,我自然会出发创建某种验证方式,以避免添加已在表中的ID。Visual Basic - 验证数组列表是否包含值

我真的没有看到我的代码有问题,但后来我又有点新的了。我想要做的是一个for循环,用当前项目的ID填充arrayList,然后检查列表中是否已经存在该ID(从组合框cmbRol获取)以避免重复。

任何见解或提示将是非常有帮助的。

这是我的代码。

Private Sub onAsignar(sender As Object, e As EventArgs) Handles btnAsignar.Click 

    Dim rol As Integer = cmbRol.SelectedValue 
    Dim lstActual As New ArrayList 
    Dim rw As Integer 

    For Each row As DataGridViewRow In gridListaDatos.Rows 

     lstActual.Add(gridListaDatos.Item(0, rw).Value) 

    Next 

    If (lstActual.Contains(rol)) Then 

     MessageBox.Show("This ID already exists in the table", "Asignar Rol", MessageBoxButtons.OK) 

    Else 

     gestorRol.asignarRolUsuario(rol, idUsuario) 
     ActualizarTabla() 

    End If 

    End Sub 

End Class 
+1

。如果(lstActual.Contains(row)Then MessageBox else执行add,并将if语句放在for循环中,而不是在它之外。我也不会做一个消息框,因为如果列表中有100个元素,这可能会很烦人。你可能想在文件中记录重复项以确保所有的数据都是相同的 – 2014-11-02 08:16:46

+0

当我使用MsjBox时,lsActual似乎实际上存储整数,或者selectedValue或I有问题我没有正确地将每个元素添加到列表中......无论如何它不会给我太多洞察力 – 2014-11-02 08:30:26

+0

MsjBox显示相同的行,例如弹出3次(arrayList中的每个元素一个),但只显示冷杉的价值,如:3-3-3 – 2014-11-02 08:35:46

回答

0

好吧,我解决了这个问题......出于某种原因(可能是后期小时),我假定RW变量将自身的,这当然不是这样自动递增。

正确的解决方案是:

私人小组onAsignar(发送者为对象,例如作为EventArgs的)尝试检查该元素的存在之前将它处理btnAsignar.Click

Dim rol As Integer = cmbRol.SelectedValue 
Dim lstActual As New ArrayList 
Dim rw As Integer = 0 

For Each index As DataGridViewRow In gridListaDatos.Rows 

    lstActual.Add(gridListaDatos.Item(0, rw).Value) 
    MessageBox.Show(gridListaDatos.Item(0, rw).Value, "ID", MessageBoxButtons.OK) 

    rw = rw + 1 

Next 

If (lstActual.Contains(rol)) Then 

    MessageBox.Show("Este rol ya pertenece a este usuario", "Asignar Rol", MessageBoxButtons.OK) 

Else 

    gestorRol.asignarRolUsuario(rol, idUsuario) 
    ActualizarTabla() 

    End If 

End Sub