Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: katsumoto en 26 de Marzo 2016, 19:35

Título: Evitar filas duplicadas en datagridview Visual Basic traspasar datos entre ellos
Publicado por: katsumoto en 26 de Marzo 2016, 19:35
Buenas a todos en la realizacion de mi proyecto estoy en el punto que desde un formulario tengo dos datagridview, Dgv_cursos y Dgv_asisten, el primero lo cargo con los datos de una bd y el otro atraves del evento CellMouseDoubleClick desde el primero he probado de diferentes formas y a parte de los errores que saltan no se por donde agarrarlo

El código con el que paso las filas de uno a otros es este

Código: [Seleccionar]
Dim coleccion As DataGridViewSelectedRowCollection = dgv_cursos.SelectedRows
   For Each fila As DataGridViewRow In coleccion
            Dim dni, apellidos, nombre, grados As String
            dni = dgv_cursos(0, fila.Index).Value
            apellidos = dgv_cursos(1, fila.Index).Value
            nombre = dgv_cursos(2, fila.Index).Value
            grados = dgv_cursos(3, fila.Index).Value
            dgv_asisten.Rows.Add(dni, apellidos, nombre, grados)


      Next


claro esta, que hago dobleclik varias veces en el mismo, me pasa tantan filas como veces hago click
estoy trabajando para encontrar la forma de hacer que no me deje reperir la misma fila filtrada por el dni,
pero ya no se como seguir he probado de todo
como el condicional

Código: [Seleccionar]
if dni  = dgv_asisten(0, fila.Index).Value then
MsgBox("las fila repetida" )
else
dgv_asisten.Rows.Add(dni, apellidos, nombre, grados)
endif


dentro del bucle for each
pero nada de nada error:
Debe ser un valor no negativo e inferior al tamaño de la colección. Nombre del parámetro: index
Título: Re:Evitar filas duplicadas en datagridview Visual Basic traspasar datos entre ellos
Publicado por: César Krall en 29 de Marzo 2016, 15:49
Hola!

Se me ocurren dos formas de intentar resolverlo

La primera sería cada vez que haces un traspaso, antes de hacerlo recuperar todos los valores de dni existentes en el datagridview de destino y si ya existe no hacer el traspaso

Algo como

Código: [Seleccionar]
            Dim dni, apellidos, nombre, grados As String
            dni = dgv_cursos(0, fila.Index).Value
            apellidos = dgv_cursos(1, fila.Index).Value
            nombre = dgv_cursos(2, fila.Index).Value
            grados = dgv_cursos(3, fila.Index).Value

    Dim cellValues As New List(Of String)
         
    For Each row As DataGridViewRow In dgv_asisten.Rows
        cellValues.Add(row.Cells(0).Value.ToString())
    Next
   
existeDNI = cellValues.Find(dni)

If existeDNI Then
alert ("El dni ya existe, no puede ser traspasado")
Else
dgv_asisten.Rows.Add(dni, apellidos, nombre, grados)
EndIf
   
La otra forma sería introducir el dni en una lista cada vez que hagas un traspaso, y luego comprobar si un dni a traspasar ya está en esa lista. En vez de comprobar sobre el DataGridView de destino comprobarías sobre una lista de dnis ya traspasados (aunque creo que la primera forma puede ser mejor)

Saludos!