none
Problema con: Index was outside the bounds of the array. RRS feed

  • Pregunta

  • Hola Estoy tratando de editar en ung ridview el cual su fuente de datos es un Datatable, que uso con sessiones con la finalidad de no perder lso datos que selecciono en un gridview:

    La estrctura es esta:

    Protected Sub gridview1_RowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs)
    
            Dim id As Integer = Convert.ToInt32(GridView1.DataKeys(e.RowIndex).Value) 'Obtenemos el ID
            Dim txtprecio As TextBox = DirectCast(GridView1.Rows(e.RowIndex).Cells(2).Controls(0), TextBox) 'Modo Texto el Monto
            Dim Price As String = txtprecio.Text
            Dim dt As DataTable = DirectCast(Session("Tabla"), DataTable) 'Agregamos el Monto a la Tabla
            Dim rows() As DataRow = dt.Select(String.Format("IdCobertura = {0}", id)) 'Donde el Id Coincida con el que se Editara.
            Dim row As DataRow = rows(0)
            row("Monto") = Convert.ToDouble(Price)  ' Agregamso el Monto Editado a la COlumna Precio.
            GridView1.EditIndex = -1  'Finalizamso el MoDO Edicion.
            FillData()              'Actualizamos.
            SumarDetalle()          'Sumamos.
        End Sub
    


    Pero al tratar de editar me Generar el Error: Index was outside the bounds of the array.

    En esta parte del codigo:  Dim row As DataRow = rows(0)

    Y pues nada qu encuentro la Solucion :S

    La estructura de la tabla es esta:

    If Not Page.IsPostBack Then
                Getmedicamentos()
                table = New System.Data.DataTable()
                table.Columns.Add("IdCobertura", GetType(System.Int32))
                table.Columns.Add("NombreCobertura",  GetType(System.String))
                table.Columns.Add("Monto", GetType(System.Decimal))
                Session.Add("Tabla", table)
              
            End If
    



    -Asp. Te Dominare!
    viernes, 6 de enero de 2012 14:00

Respuestas

  • hola

    como sabes que aqui

    Dim rows() As DataRow = dt.Select(String.Format("IdCobertura = {0}", id))

    estas obteniendo alguna row ?

    digo porque luego haces

    Dim row As DataRow = rows(0)

    y si el Select() no devuelve registros ?

    porque no lo validas

    If rows.Count = 0 Then

       Return

    End If

    'aqui resto del codigo

     

    saludos

     


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Nork613_ sábado, 7 de enero de 2012 19:53
    viernes, 6 de enero de 2012 14:16
  • Bueno Leandro Coloque Este COdigo:

    If dt.Rows.Count = 0 Then

                Return

            End If

    Y hace la funcion..Ahora Quisiera que me Actualizara Correctamente..No se proque no "Obtiene los datos" u_U

    Dim id As Integer = Convert.ToInt32(GridView1.DataKeys(e.RowIndex).Value) 'Obtenemos el ID
            Dim txtprecio As TextBox = DirectCast(GridView1.Rows(e.RowIndex).Cells(2).Controls(0), TextBox) 'Modo Texto el Monto
            Dim Price As String = txtprecio.Text
            Dim dt As DataTable = DirectCast(Session("Tabla"), DataTable) 'Agregamos el Monto a la Tabla
            Dim rows() As DataRow = dt.Select(String.Format("IdCobertura = {0}", id)) 'Donde el Id Coincida con el que se Editara.

    EL ID lo Toma

    El Precio que estoy ingresando Tambien lo esta Tomando..

     

    Y Aqui empiezan lso problemas..Tratare de dar con la Razon de ser de ese problema..u.u

      Dim rows() As DataRow = dt.Select(String.Format("IdCobertura = {0}", id))

    Saludos.


    -Asp. Te Dominare!
    • Marcado como respuesta Nork613_ sábado, 7 de enero de 2012 19:53
    viernes, 6 de enero de 2012 15:24

Todas las respuestas

  • hola

    como sabes que aqui

    Dim rows() As DataRow = dt.Select(String.Format("IdCobertura = {0}", id))

    estas obteniendo alguna row ?

    digo porque luego haces

    Dim row As DataRow = rows(0)

    y si el Select() no devuelve registros ?

    porque no lo validas

    If rows.Count = 0 Then

       Return

    End If

    'aqui resto del codigo

     

    saludos

     


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Nork613_ sábado, 7 de enero de 2012 19:53
    viernes, 6 de enero de 2012 14:16
  • La Verdad es que me esta devolviendo 'NOTHING' pero a que se debe? Qizas tenga que ver el uso de Sessiones?

    Trato de validar antes..Pero entonces nunca me actualizara? XD
    Por cierto Rows.Count se refiere a las columnas de la tabla?

     If rows.Count = 0 Then

                Return

            End If

    Me dice que no es miembro de un array..

     


    -Asp. Te Dominare!
    viernes, 6 de enero de 2012 14:30
  • Trato de validar antes..Pero entonces nunca me actualizara?

    si el filtro no devuelve registro es logico que no actualizara

     

    es que me esta devolviendo 'NOTHING' pero a que se debe?

    que cosa devuelve nothing ? la linea esta

    Dim rows() As DataRow = dt.Select(String.Format("IdCobertura = {0}", id))

    o la linea

    Dim dt As DataTable = DirectCast(Session("Tabla"), DataTable)

    Por cierto Rows.Count se refiere a las columnas de la tabla?

    es que vb.net no es keysensitive por eso puede tener problemas

    usa

    Dim _rows() As DataRow = dt.Select(String.Format("IdCobertura = {0}", id))

    If _rows.Count = 0 Then

         Return

    End If

     

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 6 de enero de 2012 14:59
  • Me tare nothing en esta linea:  Dim row As DataRow = rows(0)

    Lo demas siem trae los datos..

    El codigo nada que me funciona vere la forma de adapatarlo para que funcione.

    Gracias por la Ayuda Leandro.

     


    -Asp. Te Dominare!
    viernes, 6 de enero de 2012 15:05
  • Me tare nothing en esta linea:  Dim row As DataRow = rows(0)

    entonces usa

    Dim _rows() As DataRow = dt.Select(String.Format("IdCobertura = {0}", id))

    If _rows Is Nothing OrElse _rows.Count = 0 Then

         Return

    End If

    Dim row As DataRow = rows(0)



    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 6 de enero de 2012 15:19
  • Bueno Leandro Coloque Este COdigo:

    If dt.Rows.Count = 0 Then

                Return

            End If

    Y hace la funcion..Ahora Quisiera que me Actualizara Correctamente..No se proque no "Obtiene los datos" u_U

    Dim id As Integer = Convert.ToInt32(GridView1.DataKeys(e.RowIndex).Value) 'Obtenemos el ID
            Dim txtprecio As TextBox = DirectCast(GridView1.Rows(e.RowIndex).Cells(2).Controls(0), TextBox) 'Modo Texto el Monto
            Dim Price As String = txtprecio.Text
            Dim dt As DataTable = DirectCast(Session("Tabla"), DataTable) 'Agregamos el Monto a la Tabla
            Dim rows() As DataRow = dt.Select(String.Format("IdCobertura = {0}", id)) 'Donde el Id Coincida con el que se Editara.

    EL ID lo Toma

    El Precio que estoy ingresando Tambien lo esta Tomando..

     

    Y Aqui empiezan lso problemas..Tratare de dar con la Razon de ser de ese problema..u.u

      Dim rows() As DataRow = dt.Select(String.Format("IdCobertura = {0}", id))

    Saludos.


    -Asp. Te Dominare!
    • Marcado como respuesta Nork613_ sábado, 7 de enero de 2012 19:53
    viernes, 6 de enero de 2012 15:24