Autor Tema: Evitar filas duplicadas en datagridview Visual Basic traspasar datos entre ellos  (Leído 6628 veces)

katsumoto

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 10
    • Ver Perfil
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
« Última modificación: 29 de Marzo 2016, 15:49 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
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!
Responsable de departamento de producción aprenderaprogramar.com

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".