Hola, estoy usando un datagrid para actualizar los registros de una tabla
que obtengo a través de un dataset. El problema que tengo es que al editar
un registro y cambiar algún dato, me devuelve el error
"Referencia a objeto no establecida como instancia de un objeto"
He seguido el procedimiento indicado en esta web al pie de la letra
(
http://msdn.microsoft.com/library/s...ontrol.asp)
y nada.
La verdad es que me estoy dejando los ojos, y no consigo ver donde está el
error. Os envío el código para que me echéis una mano. Soy un novato en
esto, así que seguro que será alguna tontería
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
'Introducir aquí el código de usuario para inicializar la página
If Not IsPostBack Then
CargarDataGrid()
End If
End Sub
Private Sub DataGrid1_SortCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridSortCommandEventArgs) Handles
DataGrid1.SortCommand
DataGrid1.CurrentPageIndex = 0
CampoOrden = e.SortExpression
CargarDataGrid()
End Sub
Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles
DataGrid1.PageIndexChanged
DataGrid1.CurrentPageIndex = e.NewPageIndex
CargarDataGrid()
End Sub
Private Sub CargarDataGrid()
SqlAdaptadorDatos.Fill(DataSetDatos1)
DataSetDatos1.Tables(0).DefaultView.Sort = CampoOrden
DataGrid1.DataBind()
End Sub
Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.EditCommand
DataGrid1.EditItemIndex = e.Item.ItemIndex
CargarDataGrid()
End Sub
Private Sub DataGrid1_CancelCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.CancelCommand
DataGrid1.EditItemIndex = -1
CargarDataGrid()
End Sub
Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.UpdateCommand
'Recogemos el índice de la fila que se va a actualizar
Dim key As String = DataGrid1.DataKeys(e.Item.ItemIndex).ToString()
'Recogemos los valores introducidos
Dim titulo, formas, about, who As String
Dim units As Integer
Dim fecha As Date
Dim tb As TextBox
tb = CType(e.Item.Cells(2).Controls(0), TextBox)
titulo = tb.Text
tb = CType(e.Item.Cells(3).Controls(0), TextBox)
formas = tb.Text
tb = CType(e.Item.Cells(4).Controls(0), TextBox)
units = CInt(tb.Text)
tb = CType(e.Item.Cells(5).Controls(0), TextBox)
about = tb.Text
tb = CType(e.Item.Cells(6).Controls(0), TextBox)
who = tb.Text
tb = CType(e.Item.Cells(7).Controls(0), TextBox)
fecha = CDate(tb.Text)
'Buscamos el registro correspondiente en el DataSet
Dim r As DataSetDatos.DatosRow
r = DataSetDatos1.Datos.FindByID(CInt(key))
'Actualizamos la fila del DataSet
r.Título = titulo
r.Formas = formas
r.Units = units
r.About = about
r._Who__Where_ = who
r._When_ = fecha
'Actualizamos la BBDD
SqlAdaptadorDatos.Update(DataSetDatos1)
'Salimos del modo de edición
DataGrid1.EditItemIndex = -1
'Rellenamos el DataGrid
DataGrid1.DataBind()
'CargarDataGrid()
End Sub
... y éste es el error:
NullReferenceException: Referencia a objeto no establecida como instancia de
un objeto.]
pelis.WebForm1.DataGrid1_UpdateCommand(Object source,
DataGridCommandEventArgs e) in \\...ruta...\default.aspx.vb:204
System.Web.UI.WebControls.DataGrid.OnUpdateCommand(DataGridCommandEventArgs
e) +109
System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Object source, EventArgs
e) +507
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +26
System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Object source,
EventArgs e) +106
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +26
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +121
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String
eventArgument) +115
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler
sourceControl, String eventArgument) +18
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +138
System.Web.UI.Page.ProcessRequestMain() +1292
El error, como he dicho, me lo da al intentar actualizar un registro.
Por otro lado, tampoco me ordena los registros.
El datagrid tiene a True AllowPaging y AllowSorting
La línea a la que hace referencia el error es ésta:
Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.UpdateCommand
.
.
...
'Buscamos el registro correspondiente en el DataSet
Dim r As DataSetDatos.DatosRow
r = DataSetDatos1.Datos.FindByID(CInt(key))
'Actualizamos la fila del DataSet
->> r.Título = titulo << Aquí da el error. Esta
es la línea 204
...
End Sub
Pido perdón por la extensión del mensaje. Lo achaco a mi desquicie. Llevo 2
días dándole vueltas al tema. Lo único que me ha salido bien es la
paginación del datagrid, pero estas 2 cosas no me funcionan. He perdido la
vista intentando depurar el error, y he vuelto a escribirlo todo desde cero,
pero no hay manera. Agradeceré cualquier pista. Gracias!!
Leer las respuestas