Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   ASPX (.net) (http://www.forosdelweb.com/f78/)
-   -   Recoger elvalor de un TexBox en un DataGrid (http://www.forosdelweb.com/f78/recoger-elvalor-texbox-datagrid-434666/)

anolcue 16/10/2006 09:46

Recoger elvalor de un TexBox en un DataGrid
 
Hola,
Llevo unos dias rompiendome la cabeza porqué no consigo recoger el valor modificado sobre un textbox de una fila de un datagrid.
Para explicarme mejor, he hecho un carrito de la compra donde muestro mediante un datagrid la referencia del producto, el nombre, el precio, y finalmente en un textbox, las cantidades de ese producto que deseo comprar, que por defecto se visualiza '1'.
A continuación he generado una <ButtonColumn>, para que despues de introducir una nueva cantidad, presionar sobre el boto actualizar, y esta ir a la función correspondiente de actualizar el dato de esa fila, mediante un ItemComand.
Lo que pasa es que va todo estupedamente, recojo la fila que quiero, pero sin embargo, nunca consigo recoger el nuevo dato introducido en el textbox. Siempre me muestra '1'.
Lo he probado todo, y lo último en que se me ha quedado es lo siguiente:

//********************************************
Private Sub dgCarro_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs ) Handles dgCarro.ItemCommand

Dim mitxtBox As Web.UI.WebControls.TextBox

miTabla = Session("micarro")

Try

mitxtBox = CType(e.Item.FindControl("textCuantos"), Web.UI.WebControls.TextBox)

miFila = miTabla.Rows(CInt(e.Item.ItemIndex))
miFila.BeginEdit()
miFila("Cantidad") = CInt(mitxtBox.Text.Trim)
miFila.EndEdit()
Session("micarro") = miTabla

Catch exc As Exception
ProcessModuleLoadException(Me, exc)
End Try

End Sub
//*************************************************

Mi duda es que 'mitextbox' siempre recoge '1'. Todo el resto va bien. si pusiera manualment '8' p.ej si que se modifica en el DataTable que es en lo que estoy trabajando.
'textCuantos' es el texbox que muestro en el datagrid y con el que recojo (o al menos intento) el valor.
También quiero preguntar si influye en algo, poner este 'texCuantos' en una columna <ItemTemplate> en el datagrid, o <EditItemTemplate>. Que propiedades diferentes adquiere cada?

Bueno, eso es todo, espero que me haya explicado bien.
Muchas gracias si me conseguis ayudarme. Me estoy volviendo loco ya.
Un saludo.

axpicasso 01/11/2006 19:21

ayudita
 
Mira la verdad yo tambien tuve ese problema con el ItemCommand en 2003 y ahora estoy trabajando en 2005, no se si en el DataGrid 2003 tambien tenga algun evento para los ItemUpdating pero aqui te paso como lo hago yo en 2005 y el GridView, cualquier cosita a [email protected], [email protected]

aspx

<asp:GridView runat="server" ID="gvcarrito" AutoGenerateColumns="false">
<RowStyle CssClass="row_items" />
<HeaderStyle CssClass="header" />
<AlternatingRowStyle CssClass="alter_items" />
<Columns>
<asp:BoundField DataField="codigo" HeaderText="codigo" />
<asp:TemplateField>
<ItemTemplate>
<asp:TextBox runat="server" ID="txtcant" Text='<%#Container.DataItem("cantidad") %>'
CssClass="row_items" Width="30" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Button runat="server" ID="btn" Text="Act" CommandName="update" CssClass="alter_items" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>



CodeFile

Imports System.Data
Partial Class Default5
Inherits System.Web.UI.Page

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim dt As DataTable

If Not Session("dtcarrito") Is Nothing Then
dt = CType(Session("dtcarrito"), DataTable)
Else
dt = New DataTable
dt.Columns.Add("codigo")
dt.Columns.Add("cantidad")
End If

dt.Rows.Add(New Object() {TextBox1.Text, TextBox2.Text})

gvcarrito.DataSource = dt
gvcarrito.DataBind()

Session("dtcarrito") = dt
End Sub

Protected Sub gvcarrito_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles gvcarrito.RowUpdating
Dim item As GridViewRow = CType(gvcarrito.Rows(e.RowIndex), GridViewRow)
Dim txt As TextBox = CType(item.FindControl("txtcant"), TextBox)

Dim dt As DataTable

dt = CType(Session("dtcarrito"), DataTable)

dt.Rows(e.RowIndex)("cantidad") = txt.Text
dt.AcceptChanges()

gvcarrito.DataSource = dt
gvcarrito.DataBind()

Session("dtcarrito") = dt
End Sub
End Class


La zona horaria es GMT -6. Ahora son las 01:16.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.