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

Problema con la actualizacion de datos en datagrid

Estas en el tema de Problema con la actualizacion de datos en datagrid en el foro de .NET en Foros del Web. Hola a todos: Tengo un problema al intentar actualizar datos dentro de un datagrid, no puedo recuperar los nuevos datos ingresados por el usuario. aqui ...
  #1 (permalink)  
Antiguo 11/08/2004, 19:09
Avatar de jeancarle  
Fecha de Ingreso: junio-2004
Mensajes: 37
Antigüedad: 20 años, 5 meses
Puntos: 0
Problema con la actualizacion de datos en datagrid

Hola a todos:

Tengo un problema al intentar actualizar datos dentro de un datagrid, no puedo recuperar los nuevos datos ingresados por el usuario. aqui esta el codigo que uso en el evento UpdateCommand del data grid.

Private Sub DGPatrocinadores_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs ) Handles DGPatrocinadores.UpdateCommand

Dim txtLogo, txtNombre, txtMail, txtWeb, txtLogin, txtPwd As TextBox
Dim cls As New clsDatos 'Clase que uso para el acceso a datos

'Recuperar los valores actualizados en las cajas de texto
'******* Aqui esta el problema *********
'me recupera los mismo datos originales, no me cambia los nuevos valores
' la primeta columna esta oculta, almaceno el Id del patrocinador columna de tipo BoundColumn
'La segunda columna es el logo del patrocinador columna de tipo TemplateColumn

'Las demas son columnas de tipo BoundColumn todas
txtNombre = e.Item.Cells(2).Controls(0)
txtMail = e.Item.Cells(3).Controls(0)
txtWeb = e.Item.Cells(4).Controls(0)
txtLogin = e.Item.Cells(5).Controls(0)
txtPwd = e.Item.Cells(6).Controls(0)

Response.Write("Actualizado ID=" & e.Item.Cells(0).Text)
Response.Write("<br>" & txtNombre.Text)'Aqui me regresa el nombre original no el actualizado por el usuario

'clase que utilizo para ejecutar una sentencia SQL
cls.Execute("update patrocinadores set nombre='" & txtNombre.Text & "', mail='" & txtMail.Text & "', pagina_web='" & txtWeb.Text & "', login='" & txtLogin.Text & "', [password]='" & txtPwd.Text & "' where id_patrocinador=" & e.Item.Cells(0).Text)
cls = Nothing

DGPatrocinadores.EditItemIndex = -1
DG_DataBind()'Ligar el datagrid al origen de datos
End Sub


Alguien tiene una idea que estoy haciendo mal??

Última edición por jeancarle; 11/08/2004 a las 19:40
  #2 (permalink)  
Antiguo 12/08/2004, 06:44
 
Fecha de Ingreso: junio-2001
Ubicación: Cordoba, Argentina
Mensajes: 190
Antigüedad: 23 años, 5 meses
Puntos: 0
No se cual sera tu error bien, pero yo uso
esto
txtNombre = ctype(e.Item.FindControl("txtNombre"),TextBox)
en vez de
txtNombre = e.Item.Cells(2).Controls(0)
Ademas puede ser que estes haciendo el Bind antes del update, como ser en el evento load por eso toma los valores anteriores.
Quizas ayude...
__________________
Martin

Última edición por MartinAcevedo; 12/08/2004 a las 06:47
  #3 (permalink)  
Antiguo 12/08/2004, 09:30
Avatar de pdjazr  
Fecha de Ingreso: noviembre-2002
Ubicación: Lima - Limon
Mensajes: 207
Antigüedad: 22 años
Puntos: 0
No sera , que no estas actualizando el dataadapter despues de haber actualizado el usuario,, ya que sin eso nunca los va a grabar en la base de datos....
__________________
http://paracraneo.comlu.com
  #4 (permalink)  
Antiguo 12/08/2004, 10:07
Avatar de jeancarle  
Fecha de Ingreso: junio-2004
Mensajes: 37
Antigüedad: 20 años, 5 meses
Puntos: 0
martin he intentado tu codigo y agradezco la idea, pero como el tipo de columna es BoundColumn, la funcion FindControl no encuentra un control llamado "txtNombre" por lo tanto me regresa el sig error: "Referencia a objeto no establecida como instancia de un objeto." al momento de utilizar txtNombre.text
  #5 (permalink)  
Antiguo 12/08/2004, 10:16
Avatar de jeancarle  
Fecha de Ingreso: junio-2004
Mensajes: 37
Antigüedad: 20 años, 5 meses
Puntos: 0
pdjazr la actualizacion la hago con una clase "clsDatos" la cual contiene un metodo Execute que actualiza la base de datos:

Friend Function Execute(ByVal strSQL As String) As Integer

Dim cnn As New OleDb.OleDbConnection(_strConnection)
'intanciar objetos para la manipulación de datos con la consulta
Dim cmd As New OleDb.OleDbCommand
Dim trans As OleDb.OleDbTransaction
'Execute = 0
Try 'Manejador de errores
'Abrir la conexion
cnn.Open()
trans = cnn.BeginTransaction
cmd.Connection = cnn
cmd.CommandType = CommandType.Text
cmd.CommandText = strSQL
cmd.Transaction = trans
'Ejecutar la sentencia
Execute = cmd.ExecuteNonQuery()
'Cerrar la conexion
trans.Commit()

Catch ex As Exception 'Cachar el error
trans.Rollback()
Execute = -1
HttpContext.Current.Response.Write("<div class=error>" & ex.Message & "</div>")
Finally
cnn.Close()
'destruir objetos
cmd = Nothing
trans = Nothing
cnn = Nothing
End Try

End Function

Este es el metodo que utilizo para la actualizacion. Para ligar el datagrid al origen de datos utilizo la funcion DG_DataBind() y aqui esta el codigo:

Private Sub DG_DataBind()

Dim cls As New clsDatos 'Clase para acceso a datos
Dim ds As New DataSet ' DataSet

'GetDatos regresa un objeto de tipo dataset, como resultado de la consulta

ds = cls.GetDatos("select id_patrocinador,nombre,login,password,logo,mail,pa gina_web from patrocinadores order by nombre")

DGPatrocinadores.DataSource = Nothing

DGPatrocinadores.DataSource = ds.Tables(0).DefaultView
DGPatrocinadores.DataBind()

cls = Nothing
ds = Nothing
End Sub

tiene que ver que la propiedad EnabledViewState del datagrid este en TRUE?
  #6 (permalink)  
Antiguo 12/08/2004, 12:10
 
Fecha de Ingreso: junio-2001
Ubicación: Cordoba, Argentina
Mensajes: 190
Antigüedad: 23 años, 5 meses
Puntos: 0
lo que yo digo es que quizas estes llamando a la funcion
DG_DataBind() en el Page_Load ya que el load se ejecuta antes que
DGPatrocinadores_UpdateCommand y te estaria pisando los valores que el usuario modifico, si es el caso deberias preguntar si la pagina esta haciendo postback y enlazarlo solo una vez en el load

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
DG_DataBind()
'asdasd
End If
End
__________________
Martin
  #7 (permalink)  
Antiguo 13/08/2004, 19:35
Avatar de pdjazr  
Fecha de Ingreso: noviembre-2002
Ubicación: Lima - Limon
Mensajes: 207
Antigüedad: 22 años
Puntos: 0
JeanCarle...Deberias usar las herramientas de controles visuales en el form....y no tendrias tanto problema..la programacion deberia ser minima....
1. Definir la conexion
2. Definir DataAdapter
3. Definir DataSet
4. Asociar a la propiedad datasource del DS , el datagrid....y listo

saludos
__________________
http://paracraneo.comlu.com
  #8 (permalink)  
Antiguo 16/08/2004, 10:48
Avatar de jeancarle  
Fecha de Ingreso: junio-2004
Mensajes: 37
Antigüedad: 20 años, 5 meses
Puntos: 0
Finalmente ya me funcionó con la solución de Martín, gracias a todos por ayudarle a este novato de .NET jeje

Salu2

Última edición por jeancarle; 16/08/2004 a las 10:49
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 23:01.