Estoy tratando de utilizar la funcionalidad de un datagrid en cuanto al uso de columnas de edit, update y cancel. He podido programar los eventos edit y cancel. Sin embargo en el evento update trato de tomar los valores que se editan en los texboxes para luego hacer el update a la tabla.

Pero no toma los valores que que introduzco. Es decir, se queda con el mismo valor que tenía el grid antes de editarlo. Este es mi código:
Código:
Private Sub grid_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles grid.UpdateCommand
Dim metaTxt As System.Web.UI.WebControls.TextBox = New System.Web.UI.WebControls.TextBox
metaTxt = e.Item.Cells(2).Controls(0)
Dim CodigoTxt As System.Web.UI.WebControls.TextBox = e.Item.Cells(0).Controls(0)
Dim codigo As String = Val(CodigoTxt.Text)
Dim meta As String = metaTxt.Text
Dim tmp As String = e.Item.Cells(2).Text
'--------------------------------------------------------------
Dim BD As Mdg.CBaseDatos = New CBaseDatos
Dim sSql As String
BD.Conectar()
BD.Drd = BD.Query("Begin Transaction") : BD.Drd.Close()
sSql = "update segd_objetivos_x_posicion set Factor_Proyectado = " & meta & _
" where Numero_Colectivo_posicion = " & codigo & ""
BD.Drd = BD.Query(sSql)
BD.Drd.Close()
BD.Drd = BD.Query("Commit") : BD.Drd.Close()
BD.Desconectar()
grid.EditItemIndex = -1
fillgrid()
End Sub
Se supone que la variable Meta debería tomar el valor nuevo que yo introduzca en la columna / fila específica del grid. Cuando lo corrí paso a paso me dí cuenta de que no toma el nuevo valor, por tanto el udate a la tabla se realiza con los mismos valores.
¿Qué estaré haciendo mal?