none
problema con el evento cellclick de un datagridview RRS feed

  • Pregunta

  • disculpen que continuo con esta pregunta pero no me permite seleccionar un foro para agregar esta nueva pregunta, nose porke :/ :

    hola, nuevamente:

    tengo el siguiente problema : con el evente cellclick de un gatagridview carga los datos a textboxes y comboboxes seleccionando la fila, cuando se selecciona el header de la columna o "ese pequeño rectangulo de la esquina" del fatagridview me aparece el siguiente error:

    no se controlo ArgumentOutOfRangeException: {"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"}

    Gracias, Julian Diaz

    miércoles, 4 de enero de 2012 17:21

Respuestas

  • "julio29" preguntó:

    > y como puedo solucionar el problema

    Aplicando lo que te ha comentado Marvin. Tienes que verificar si el valor de la propiedad RowIndex del parámetro 'e' es o no -1. Si es -1, abandonarías el procedimiento, y si es mayor, podrás acceder a la fila:

        Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) _
            Handles dgvPacientes.CellClick

            ' Si no hay ninguna fila seleccionada, abandonamos
            ' el procedimiento:
            '
            If (e.RowIndex = -1) Then Return

            Me.btnSeleccionar.Enabled = True
            btnEliminar.Enabled = True

            Dim str As String = Me.dgvPacientes.Rows(e.RowIndex).Cells(0).Value.ToString()
            Me.txtId.Text = str

        End Sub


    >  If (dgvPacientes.CurrentRow Is Nothing) Then
    >     Dim row As DataGridViewRow = dgvPacientes.Rows(e.RowIndex)
    >     Dim value As Object = row.Cells(0).Value
    >     MessageBox.Show(Convert.ToString(value))
    >     Return
    >  End If

    Esto no se te ocurra ejecutarlo, porque si la propiedad CurrentRow es Nothing, vas a obtener otro error diferente. :-)

    Lo que yo te indiqué en un principio era lo siguiente:

       If (dgvPacientes.CurrentRow Is Nothing) Then
          ' No existe ninguna fila actual; abandonamos
          ' el procedimiento
          Return
       End If

    Es decir, si el valor es Nothing, abandonamos el procedimiento sin más.

     


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    miércoles, 4 de enero de 2012 22:16
    Moderador
  • cuando se selecciona el header de la columna o "ese pequeño rectangulo de la esquina" del fatagridview me aparece el siguiente error:

    no se controlo ArgumentOutOfRangeException: {"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"}

    Gracias, Julian Diaz

     

    e.RowIndex sera igual a -1 si haces clic sobre el encabezado de una columna, por ende el error que mencionas ya que no existe la fila -1 como menciono SoftJaén, Indices base 0

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    miércoles, 4 de enero de 2012 20:37
    Moderador

Todas las respuestas

  • "julio29" escribió:

    > no se controlo ArgumentOutOfRangeException: {"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"}

    Julian, si obtienes ese error es porque estás intentando referenciar un ELEMENTO INEXISTENTE, estás indicando un índice que no existe en la colección cuyo elemento deseas seleccionar.

    Te en cuenta que en .NET todos los índices de las colecciones y arrays están en base cero, lo que significa que el primer elemento es el 0, el segundo el 1, el tercero el 2, etc.

    Como ignoro el código que estás ejecutando en el evento CellClick del control DataGridView, lo único que te puedo decir por ahora es cómo referenciar la fila que ha desencadeno dicho evento:

        Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) _
            Handles DataGridView1.CellClick

            If (DataGridView1.CurrentRow Is Nothing) Then
                ' No existe ninguna fila actual; abandonamos
                ' el procedimiento
                Return
            End If

            ' Referenciamos la fila que ha desencadenado éste evento.
            '
            Dim row As DataGridViewRow = DataGridView1.Rows(e.RowIndex)

            ' Obtenemos el valor de la primera celda
            '
            Dim value As Object = row.Cells(0).Value

            MessageBox.Show(Convert.ToString(value))

        End Sub

    Un saludo


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    miércoles, 4 de enero de 2012 19:10
    Moderador
  • en principio, gracias por responder.

    segundo, este es el evento del cellclick:

     Private Sub dgvPacientes_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvPacientes.CellClick
            Me.btnSeleccionar.Enabled = True
            btnEliminar.Enabled = True
            Dim str As String = Me.dgvPacientes.Rows(e.RowIndex).Cells(0).Value.ToString()
            Me.txtId.Text = str
        End Sub
    


    el txtId me sirve de referencia para cuando : si el usuario hace click en "Seleccionar" o dobleclick en la fila, ejecutando esto:

    Com = New OleDbCommand("Select * FROM tblPacientes WHERE IdPaciente ='" & Me.txtId.Text & "' ", Cnn)
            Dim MyReader As OleDbDataReader = Com.ExecuteReader
            While MyReader.Read
                frmPaciente.Show()
    

    y una serie de combobox y textbox leen la data del reader....

     

    miércoles, 4 de enero de 2012 19:23
  • cuando se selecciona el header de la columna o "ese pequeño rectangulo de la esquina" del fatagridview me aparece el siguiente error:

    no se controlo ArgumentOutOfRangeException: {"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"}

    Gracias, Julian Diaz

     

    e.RowIndex sera igual a -1 si haces clic sobre el encabezado de una columna, por ende el error que mencionas ya que no existe la fila -1 como menciono SoftJaén, Indices base 0

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    miércoles, 4 de enero de 2012 20:37
    Moderador
  • y como puedo solucionar el problema, colocoando esto antes del proceso del cellclik: ??

      Private Sub dgvPacientes_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvPacientes.CellClick
            If (dgvPacientes.CurrentRow Is Nothing) Then
                Dim row As DataGridViewRow = dgvPacientes.Rows(e.RowIndex)
                Dim value As Object = row.Cells(0).Value
                MessageBox.Show(Convert.ToString(value))
                Return
            End If
    
            Me.btnSeleccionar.Enabled = True
            btnEliminar.Enabled = True
            Dim str As String = Me.dgvPacientes.Rows(e.RowIndex).Cells(0).Value.ToString()
            Me.txtId.Text = str
        End Sub
    


    miércoles, 4 de enero de 2012 21:59
  • "julio29" preguntó:

    > y como puedo solucionar el problema

    Aplicando lo que te ha comentado Marvin. Tienes que verificar si el valor de la propiedad RowIndex del parámetro 'e' es o no -1. Si es -1, abandonarías el procedimiento, y si es mayor, podrás acceder a la fila:

        Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) _
            Handles dgvPacientes.CellClick

            ' Si no hay ninguna fila seleccionada, abandonamos
            ' el procedimiento:
            '
            If (e.RowIndex = -1) Then Return

            Me.btnSeleccionar.Enabled = True
            btnEliminar.Enabled = True

            Dim str As String = Me.dgvPacientes.Rows(e.RowIndex).Cells(0).Value.ToString()
            Me.txtId.Text = str

        End Sub


    >  If (dgvPacientes.CurrentRow Is Nothing) Then
    >     Dim row As DataGridViewRow = dgvPacientes.Rows(e.RowIndex)
    >     Dim value As Object = row.Cells(0).Value
    >     MessageBox.Show(Convert.ToString(value))
    >     Return
    >  End If

    Esto no se te ocurra ejecutarlo, porque si la propiedad CurrentRow es Nothing, vas a obtener otro error diferente. :-)

    Lo que yo te indiqué en un principio era lo siguiente:

       If (dgvPacientes.CurrentRow Is Nothing) Then
          ' No existe ninguna fila actual; abandonamos
          ' el procedimiento
          Return
       End If

    Es decir, si el valor es Nothing, abandonamos el procedimiento sin más.

     


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    miércoles, 4 de enero de 2012 22:16
    Moderador
  • gracias a los dos, lo solucione de la siguiente manera y funciona correctamente, si surge algun percance se los comunicare:

    Private Sub dgvTurnos_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvTurnos.CellClick
            If (e.RowIndex = -1) Then Return
    
    (resto del codigo)
    
      Private Sub dgvTurnos_ColumnHeaderMouseClick(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dgvTurnos.ColumnHeaderMouseClick
            MsgBox("Por favor, seleccione una fila haciendo click en los rectangulos con el simbolo de flecha.", MsgBoxStyle.Exclamation, "Orthopedix PM  -Error-")
        End Sub

    gracias

    miércoles, 4 de enero de 2012 22:35
  • Muchas gracias solucioné el mismo problema con esta sugerencia. Saludos.
    martes, 28 de agosto de 2018 3:22