none
Evento KeyDown de un DataGridView RRS feed

  • Pregunta

  •  Hola a todos, en el evento KeyDown de mi DataGridView2 del Form2 tengo el sig. codigo:

    If e.KeyCode = Keys.Enter Then

      For i = 0 To Form1.DataGridView1.RowCount - 1
      Form1.DataGridView.Item(11, i).Value = Me.DataGridView2.SelectedRows(0).Cells(1).Value.ToString
      Form1.DataGridView.Item(12, i).Value = Me.DataGridView2.SelectedRows(0).Cells(2).Value.ToString
      Form1.DataGridView.Item(13, i).Value = Me.DataGridView2.SelectedRows(0).Cells(6).Value.ToString

      Me.Close()

      Next                 
    End If

    De esta manera copio los valores de las celdas del DataGridView2 de la fila seleccionada a las celdas del DataGridView1 del Form1.

    El problema que tengo es que mientras edito el DataGridView1, a partir de la segunda fila me tira el sig error:

    El índice estaba fuera del intervalo. Debe ser un valor no negativo e inferior al tamaño de la colección.
    Nombre del parámetro: index     (y me mancha el codigo del evento KeyDown del DataGridView2)

    Es decir mientras edito el DataGridView1 solo puedo realizar la copia de la fila seleccionada del DataGridView2 al DataGridView1 en el primer registro o fila, termino de editar la primera fila y comienzo a editar la segunda, llamo al evento KeyDown del DataGridView2 para realizar nuevamente la copia y me devuelve el error. Alguien sabria decirme donde esta el problema y modificar mi codigo.

    Muchas gracias de antemano.

    Saludos

    • Cambiado Enrique M. Montejo sábado, 7 de abril de 2012 17:24 Controles de Windows Forms (De:Lenguaje VB.NET)
    martes, 6 de marzo de 2012 0:14

Todas las respuestas

  • hola

    y como sabes que esto

    DataGridView2.SelectedRows

    tienes items para trabajar, alli asumesn que al menos hay uno, pero sino es asi

    porque no poens la validacion

    If DataGridView2.SelectedRows.Count = 0 Then

      Return

    End If

    sino hay seleccion entonces no haces nada y sales

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 6 de marzo de 2012 0:34
  • Hola Leandro, el DataGridView2 siempre tiene items y al dar ENTER en una fila seleccionada me copia los valores como te puse en el codigo anterior al DataGridView1, el problema que el codigo resulta unicamente para la primera fila de edicion del DataGridView1, cuando quiero realizar la copia a partir de la segunda fila del DataGridView1 me tira ese error. Este ultimo codigo que me pasaste no se como adaptarlo al mio y armarlo.

    Muchas gracias nuevamente

    martes, 6 de marzo de 2012 2:16
  • DataGridView2 siempre tiene items

    que tenga items no quiere decir que uno este marcado como seelccionado

    alli usas la propiedad SelectedRows, no la propiedad Rows, Rows puede tener filas, pero SelectedRows, puede no tener ninguna

    cuando quiero realizar la copia a partir de la segunda fila del DataGridView1 me tira ese error

    no has probado usando

    For Each row As DataGridViewRow In Form1.DataGridView1.Rows

        row.Cells(11).Value = ....

    Next

    para recorrer los registros

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 6 de marzo de 2012 2:25
  • Hola Leandro, cambie el codigo original por el que me pasaste y quedo de esta manera en el evento KeyDown del DataGridView2

      If e.KeyCode = Keys.Enter Then
                        For Each row As DataGridViewRow In DataGridView1.Rows
                            row.Cells(11).Value = Me.DataGridView2.SelectedRows(0).Cells(1).Value.ToString
                            row.Cells(12).Value = Me.DataGridView2.SelectedRows(0).Cells(2).Value.ToString
                            row.Cells(13).Value = Me.DataGridView2.SelectedRows(0).Cells(6).Value.ToString
                            Me.Close()
                        Next
                    End If

    Pero sucede lo mismo me tira el mismo error: El índice estaba fuera del intervalo. Debe ser un valor no negativo e inferior al tamaño de la colección.Nombre del parámetro: index

    Te voy a explicar paso a paso como edito el DataGridView1 porque me parece que el error lo tengo ahí.

    Supongamos que lo estoy editando, cuando llego a la columna 11 y doy ENTER sin haber agregado ningun valor en la celda, se abre el DataGridView2 con todos los registros, selecciono una fila, doy ENTER y me copia los valores al DataGridView1. Hasta aca todo perfecto. El problema surge cuando llego a la columna 11, agrego un valor numerico o texto, doy ENTER, se filtra el DataGridView2 dependiendo del valor ingresado en la celda y se abre, aca cuando selecciono una fila y doy ENTER me tira el error que te puse anteriormente.

    Espero puedas ayudarme, muchas gracias nuevamente y Saludos

    miércoles, 7 de marzo de 2012 1:15