Foros del Web » Programación para mayores de 30 ;) » .NET »

Update en el datagrid

Estas en el tema de Update en el datagrid en el foro de .NET en Foros del Web. Hola, Se que estas preguntas se suceden constantemente en el foro pero es que no encuentro en los mensajes posteados la explicacion clara acerca . ...
  #1 (permalink)  
Antiguo 11/05/2005, 16:30
 
Fecha de Ingreso: diciembre-2001
Mensajes: 262
Antigüedad: 22 años, 4 meses
Puntos: 0
Update en el datagrid

Hola,

Se que estas preguntas se suceden constantemente en el foro pero es que no encuentro en los mensajes posteados la explicacion clara acerca .


este codigo que os pongo:

Código:
Sub DgCarrito_Update(obj As Object, e As DataGridCommandEventArgs)
     Dim codigo As String = DgCarrito.DataKeys(e.Item.ItemIndex)
     Dim cantidad As String = CType(e.Item.Cells(0).Controls(0),TextBox).Text
    Dim strSQL As String = "UPDATE pedidos SET cantidad= '" & cantidad & "' Where codigo='"& codigo & "'; "
    ExecuteStatement(strSQL)
    mostrarCarrito()
 End Sub
Me da este error:

Código:
System.ArgumentOutOfRangeException: El argumento especificado está fuera del intervalo de valores válidos. Nombre del parámetro: index

Dim cantidad As String = CType(e.Item.Cells(0).Controls(0),TextBox).Text
Mi pregunta es..
Como puedo asignar a la variable cantidad el valor del campo en edicion de la linea del datagrid?,
Deduzco que ...cells(0) es la primera columna ¿no?, controls(0), no se lo que es. y claro, no hay manera.


Gracias
  #2 (permalink)  
Antiguo 12/05/2005, 02:15
 
Fecha de Ingreso: abril-2005
Ubicación: España - Madrid
Mensajes: 236
Antigüedad: 19 años, 1 mes
Puntos: 2
A la celda de edicion se accede de esta forma:
datagrid1.items(e.item.itemindex).Cells(0)

No se si es esto a lo que te refieres.

saludos
  #3 (permalink)  
Antiguo 12/05/2005, 04:10
 
Fecha de Ingreso: diciembre-2001
Mensajes: 262
Antigüedad: 22 años, 4 meses
Puntos: 0
Hola,

si pongo esto.

Código:
Dim cantidad As String = DgCarrito.Items(e.Item.ItemIndex).Cells(0)
No funciona, me da el error..

Código:
 BC30311: Un valor de tipo 'System.Web.UI.WebControls.TableCell' no se puede convertir en '2'.
Lo que no se es como asignar el valor del campo en edicion a la variable para poder hacer el update

Gracias de todas formas
  #4 (permalink)  
Antiguo 12/05/2005, 11:43
 
Fecha de Ingreso: diciembre-2001
Mensajes: 262
Antigüedad: 22 años, 4 meses
Puntos: 0
Hola de nuevo.

He cambiado todo el codigo esto

Código:
Sub DgCarrito_Update(obj As Object, e As DataGridCommandEventArgs)
     Dim MyCommand As oleDbCommand

     Dim strSQL As String = "UPDATE pedidos SET cantidad= @nuevovalor Where codigo= @codigo; "

    Mycommand = New OledbCommand(strSQL,ObjConn)
    MyCommand.Parameters.Add(New OledbParameter("@codigo", oledbType.Char))
    MyCommand.Parameters.Add(New OledbParameter("@nuevovalor", oledbType.Char))

    MyCommand.Parameters("@codigo").Value = dgCarrito.DataKeys(e.Item.ItemIndex)

    Dim textboxcantidad As TextBox
     textboxcantidad = e.Item.Cells(0).Controls(0)
     Dim NuevoValor As integer = cInt (textboxcantidad.text)

     MyCommand.Parameters("@nuevovalor").Value = NuevoValor

    Try
        MyCommand.Connection.Open()
        MyCommand.ExecuteNonQuery()
        lblMensaje.Text = "Actualizado con exito"
        DgCarrito.EditItemIndex = -1
    Catch ex As Exception
        lblMensaje.Text = ex.message & "Error al Actualizar"
    End Try

    MyCommand.Connection.Close()




    mostrarCarrito()
 End Sub
Pero sigo con otro error

Código:
textboxcantidad = e.Item.Cells(0).Controls(0)
-
 System.ArgumentOutOfRangeException: El argumento especificado está fuera del intervalo de valores válidos. Nombre del parámetro: index
Por favor...

Saludos
  #5 (permalink)  
Antiguo 12/05/2005, 11:58
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Podrías mostrarnos el HTML de tu datagrid..??

Creo que el problema viene de ahi... espero que no estes manejando boundcolumns o algo por el estilo porque las cosas son un poco diferente en esos casos..

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #6 (permalink)  
Antiguo 12/05/2005, 12:26
 
Fecha de Ingreso: diciembre-2001
Mensajes: 262
Antigüedad: 22 años, 4 meses
Puntos: 0
Pues si que he puesto boundcolumns.

Código:
<asp:DataGrid id="dgCarrito" runat="server" CellPadding="3" BackColor="White" BorderWidth="1px" BorderStyle="None" BorderColor="#CCCCCC" OnCancelCommand="DgCarrito_Cancel" OnEditCommand="DgCarrito_Edit" OnUpdateCommand="DgCarrito_Update" OnDeleteCommand="DgCarrito_Delete" OnPageIndexChanged="DgCarrito_PageIndexChanged" AutoGenerateColumns="False" DataKeyField="codigo">
                            <FooterStyle forecolor="#000066" backcolor="White"></FooterStyle>
                            <SelectedItemStyle font-bold="True" forecolor="White" backcolor="#669999"></SelectedItemStyle>
                            <ItemStyle forecolor="#000066"></ItemStyle>
                            <HeaderStyle font-bold="True" forecolor="White" backcolor="#006699"></HeaderStyle>
                            <Columns>
                                <asp:BoundColumn Visible="False" DataField="codigo" ReadOnly="True" HeaderText="Codigo"></asp:BoundColumn>
                                <asp:BoundColumn DataField="cantidad" HeaderText="Cantidad">
                                    <HeaderStyle width="8px"></HeaderStyle>
                                </asp:BoundColumn>
                                <asp:BoundColumn DataField="nombre" ReadOnly="True" HeaderText="Nombre"></asp:BoundColumn>
                                <asp:BoundColumn DataField="precio" ReadOnly="True" HeaderText="Precio"></asp:BoundColumn>
                                <asp:BoundColumn DataField="Subtotal" ReadOnly="True" HeaderText="Subtotal"></asp:BoundColumn>
                                <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Actualizar" HeaderText="Modificar" CancelText="Cancelar" EditText="Modificar"></asp:EditCommandColumn>
                                <asp:ButtonColumn Text="Suprimir" CommandName="Delete"></asp:ButtonColumn>
                            </Columns>
                            <PagerStyle horizontalalign="Left" forecolor="#000066" backcolor="White" mode="NumericPages"></PagerStyle>
                        </asp:DataGrid>
Este es mi datagrid.

Ahora si que no lo pillo
  #7 (permalink)  
Antiguo 13/05/2005, 11:15
 
Fecha de Ingreso: diciembre-2001
Mensajes: 262
Antigüedad: 22 años, 4 meses
Puntos: 0
Bueno otra vez estoy aqui.

Ya lo he solucionado lo de los errores, este es el codigo completo, con el datagrid del mensaje anterior.

Código:
Sub DgCarrito_Update(obj As Object, e As DataGridCommandEventArgs)
     Dim MyCommand As oleDbCommand

     Dim strSQL As String = ("UPDATE pedidos SET cantidad= @nuevovalor Where codigo= @codigo ; ")

    Mycommand = New OledbCommand(strSQL,ObjConn)
    MyCommand.Parameters.Add(New OledbParameter("@codigo", oledbType.Char, 20))
    MyCommand.Parameters.Add(New OledbParameter("@nuevovalor", oledbType.Integer, 10))

    MyCommand.Parameters("@codigo").Value = dgCarrito.DataKeys(e.Item.ItemIndex)

    Dim nuevovalor As String
     nuevovalor = CType(e.Item.Cells(1).Controls(0),TextBox).Text


     MyCommand.Parameters("@nuevovalor").Value = NuevoValor

    Try
        ObjConn.Open()
        MyCommand.ExecuteNonQuery()
        DgCarrito.EditItemIndex = -1
        lblMensaje.Text = "Actualizado con exito <br>" & strSQL & " <BR>" & nuevovalor & " " & dgCarrito.DataKeys(e.Item.ItemIndex)

    Catch ex As Exception
        lblMensaje.Text = ex.message & "Error al Actualizar"
    End Try

    ObjConn.Close()
    mostrarCarrito()
 End Sub
Todo funciona bien, solo que .... No hace nada
Es decir, .. no hace hada, el registro no se actualiza

Alguna idea por favor
  #8 (permalink)  
Antiguo 13/05/2005, 11:49
 
Fecha de Ingreso: mayo-2004
Ubicación: Guadalajara, Jalisco, México
Mensajes: 724
Antigüedad: 20 años
Puntos: 6
Cita:
Iniciado por almaluz
Pues si que he puesto boundcolumns.
Este es mi datagrid.

Ahora si que no lo pillo


ajja... se supone que eres mexicano..


salu2

Última edición por Stream; 13/05/2005 a las 13:55
  #9 (permalink)  
Antiguo 13/05/2005, 12:26
 
Fecha de Ingreso: diciembre-2001
Mensajes: 262
Antigüedad: 22 años, 4 meses
Puntos: 0
Noo

No soy de mexico,

Soy de las Españas
Andaluz

Jeje
  #10 (permalink)  
Antiguo 23/06/2005, 18:20
Avatar de Krotalo  
Fecha de Ingreso: marzo-2002
Ubicación: Mexicalpan de las Tunas
Mensajes: 48
Antigüedad: 22 años, 1 mes
Puntos: 0
Exactamente ami me pasa lo mismo, no puedo hacer un update, desde el datagrid utilizando BoundColumns este es mi codigo:
-----------
Dim DS As DataSet 'declara el dataset
Dim Comando As OleDbCommand 'declara el oldbcommand
Dim Sqlstring As String = "UPDATE Localidad SET nom_loc = @nloc where id_loc = @Idloc;" 'inicializa la sentencia sql
Comando = New OleDbCommand(Sqlstring, ConnBd) ' inicializa el comando oldb con la cadeba sql y la conexcion ala bd
Comando.Parameters.Add(New OleDbParameter("@Idloc", OleDbType.integer, 11)) 'crea el parametro @idloc
Comando.Parameters.Add(New OleDbParameter("@nloc", OleDbType.Char, 40))'crea el parametro @nloc
Comando.Parameters("@Idloc").Value = Datagrid.DataKeys(CInt(E.Item.ItemIndex)) ' inicializa @idloc = a el elemento editado en el datagrid

mensaje2.InnerHtml = Comando.Parameters("@Idloc").Value.ToString()' para monitorear el valor de @ideloc

Dim Cols As String() = {"@Idloc","@nloc"} ' define un arreglo con los parametros
Dim NumCols As Integer = E.Item.Cells.Count 'cuanta cuantas columnas tiene el datagrid
Dim I As Integer 'un contador
For I=2 To NumCols-1 'omite la primera y segunda columna osea los controles de edicion y la columna que muestra los id's
Dim CurrentTextBox As System.Web.UI.WebControls.TextBox ' declara un objeto tipo texbox
CurrentTextBox = E.Item.Cells(I).Controls(0) 'asigna el valor introducido en el texbox del datagrid al objeto anterior
Dim ColValue As String = CurrentTextBox.Text 'crea una variable strin y asigana el valor de la variable anterior
Comando.Parameters(Cols(I-1)).Value = ColValue 'inicializa los parametros con los valores introducidos en el datagrid
mensaje3.InnerHtml = Comando.Parameters(Cols(I-1)).Value.ToString() ' para monitoriear los valores
Next
Comando.Connection.Open() 'abre
mensaje4.InnerHtml = Comando.Parameters("@Idloc").Value.ToString()'moni torea el parametro
Try
Comando.ExecuteNonQuery()'executa
mensaje.InnerHtml = "Registro actualizado" & Sqlstring.ToString() 'mesnaje de confirmacion y muestra la sentencia SQL
Datagrid.EditItemIndex = -1'cierra la columna edicion
Catch Exp As OleDbException

mensaje.InnerHtml = "Error no se pudo actualizar el registro"

End Try
Comando.Connection.Close()
BindGrid() ' recarga el datagrid

-------------------------------

y pues los parametros tienen los valores correctos, pero no actualiza el registro, ni nada, alguien sabe a que se debe?????
__________________
:neurotico
:ojotes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:25.