Tengo un formulario, que tiene un gridview con la opcion update activadar, cada columna del gridview la converti en TemplateField para modificar la edicion a mi gusto.
pero de todos lo campos que tengo para actualizar, hay uno que no me actualiza, ya le busque y revise el codigo muchas veces y segun yo esta bien; es mas... se me hace logico todo lo que hice para la actualizacion de ese campo.
El campo a actualizar se llama "Cuenta" y los valores que ahi se guardan dependen de otro campo que se llama "CategNom" que es un dropdownlist cuando entra a modo de edicion, depende de lo que seleccione en "CategNom" es lo que se gurdara en el campo "Cuenta".
Les muestro la parte del codigo donde se hace la actualizacion en el gridview, parte en negrita es la que hace referencia a el campo ha actualizar y del campo del que depende:
Código:
Este es mi procedimiento almacenado:Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating Dim ddl_tipo As DropDownList Dim id As Label Dim tb_fechagasto As TextBox Dim ddl_categoria As DropDownList Dim tb_montorg As TextBox Dim ddl_moneda As DropDownList Dim tb_tipocambio As TextBox Dim ddl_pais As DropDownList Dim ddl_recibofiscal As DropDownList Dim tb_iva As TextBox Dim tb_comentariosu As TextBox id = DirectCast((Me.GridView1.Rows(e.RowIndex).Cells(1).FindControl("lb_id")), Label) ddl_tipo = DirectCast((Me.GridView1.Rows(e.RowIndex).Cells(1).FindControl("ddl_tipo")), DropDownList) tb_fechagasto = DirectCast((Me.GridView1.Rows(e.RowIndex).Cells(1).FindControl("tb_fechagasto")), TextBox) ddl_categoria = DirectCast((Me.GridView1.Rows(e.RowIndex).Cells(1).FindControl("ddl_categoria")), DropDownList) **** Este es una operacion ejecuto un procedimiento almacenado, le paso el valor de la variable "ddl_catergoria" para sacar de la base de datos parte de del valor que debe de ir en "Cuenta" **** Dim depto As Integer Dim planta As Integer Dim prefijo As String depto = Me.lb_centrocostos.Text planta = Left(depto, 2) Select Case planta Case 65 prefijo = "5S" Case 66 prefijo = "5S" Case 67 prefijo = "5S" Case 68 prefijo = "U2" End Select Using cnn As New SqlConnection(Me.SqlDataSource1.ConnectionString) Dim cmd As New SqlCommand() cmd.CommandText = "selecciona_cuenta" cmd.CommandType = CommandType.StoredProcedure cmd.Connection = cnn cmd.Parameters.AddWithValue("@descripcion", ddl_categoria.SelectedValue) cnn.Open() Dim tabla As New DataTable Dim da As New SqlDataAdapter(cmd) da.Fill(tabla) Dim cta_izq As String Dim cta_der As String Dim cuenta As String cuenta = tabla.Rows(0)("cuenta").ToString cta_izq = tabla.Rows(0)("cuentaizq").ToString cta_der = tabla.Rows(0)("cuentader").ToString If cuenta <> "" Then Me.lb_cuenta.Text = cuenta Else Me.lb_cuenta.Text = prefijo & cta_izq & depto & cta_der End If End Using tb_montorg = DirectCast((Me.GridView1.Rows(e.RowIndex).Cells(1).FindControl("tb_montorg")), TextBox) ddl_moneda = DirectCast((Me.GridView1.Rows(e.RowIndex).Cells(1).FindControl("ddl_moneda")), DropDownList) tb_tipocambio = DirectCast((Me.GridView1.Rows(e.RowIndex).Cells(1).FindControl("tb_tipocambio")), TextBox) ddl_pais = DirectCast((Me.GridView1.Rows(e.RowIndex).Cells(1).FindControl("ddl_pais")), DropDownList) ddl_recibofiscal = DirectCast((Me.GridView1.Rows(e.RowIndex).Cells(1).FindControl("ddl_recibofiscal")), DropDownList) tb_iva = DirectCast((Me.GridView1.Rows(e.RowIndex).Cells(1).FindControl("tb_iva")), TextBox) tb_comentariosu = DirectCast((Me.GridView1.Rows(e.RowIndex).Cells(1).FindControl("tb_comentariosu")), TextBox) Me.lb_id.Text = id.Text Me.lb_tipo.Text = ddl_tipo.SelectedValue Me.lb_fechagasto.Text = tb_fechagasto.Text Me.lb_categoria.Text = ddl_categoria.SelectedValue Me.lb_montorg.Text = tb_montorg.Text Me.lb_moneda.Text = ddl_moneda.SelectedValue Me.lb_tipocambio.Text = tb_tipocambio.Text Me.lb_pais.Text = ddl_pais.SelectedValue Me.lb_recibofiscal.Text = ddl_recibofiscal.SelectedValue Me.lb_iva.Text = tb_iva.Text Me.lb_comentariosu.Text = tb_comentariosu.Text Using cnn As New SqlConnection(Me.SqlDataSource1.ConnectionString) Dim cmd As New SqlCommand() cmd.CommandText = "actualizar_datos" cmd.CommandType = CommandType.StoredProcedure cmd.Connection = cnn cnn.Open() cmd.Parameters.AddWithValue("@id", Me.lb_id.Text) cmd.Parameters.AddWithValue("@modo_pago", Me.lb_tipo.Text) cmd.Parameters.AddWithValue("@fecha_gasto", Me.lb_fechagasto.Text) cmd.Parameters.AddWithValue("@categoria", Me.lb_categoria.Text) ****Has aqui, todo bien, el valor que tiene "lb_cuenta.text" es el correcto que quiero almacenar ***** cmd.Parameters.AddWithValue("@cta", Me.lb_cuenta.Text) cmd.Parameters.AddWithValue("@monto", Me.lb_montorg.Text) cmd.Parameters.AddWithValue("@mnda", Me.lb_moneda.Text) cmd.Parameters.AddWithValue("@tipo_cambio", Me.lb_tipocambio.Text) cmd.Parameters.AddWithValue("@pais", Me.lb_pais.Text) cmd.Parameters.AddWithValue("@recibo", Me.lb_recibofiscal.Text) cmd.Parameters.AddWithValue("@iva", Me.lb_iva.Text) cmd.Parameters.AddWithValue("@comentarios", Me.lb_comentariosu.Text) cmd.ExecuteNonQuery() Me.GridView1.DataBind() End Using End Sub
Código:
Ya le busque y pense donde puede estar el error, pero no me funciona, ojala y me puedan ayudar.ALTER PROCEDURE dbo.actualizar_datos @id int, @modo_pago nvarchar(18), @fecha_gasto datetime, @categoria nvarchar(30), @cta nvarchar(50), @monto money, @mnda nvarchar(5), @tipo_cambio money, @pais nvarchar(5), @recibo nvarchar(15), @iva money, @comentarios nvarchar(max) AS UPDATE Gastos SET Tipo = @modo_pago, FechaGasto = @fecha_gasto, CategNom = @categoria, Cuenta = @cta, MontoOrg = @monto, Moneda = @mnda, TipoCambio = @tipo_cambio, Pais = @pais, ReciboFiscal = @recibo, Iva = @iva, ComentariosU = @comentarios WHERE (Id = @id) RETURN
Muchas gracias