none
actualizar un texbox que esta en una tabla gridview RRS feed

  • Pregunta

  •   

    Hola a Todos

    Estoy desarrollando una pagina web en asp.net VB. En el siguiente codigo estoy usando el enlace actualizar del Gridview que ofrece el visual studio 2012.He validado la fecha y hora para que no se repitan.Lo que pasa es que ahora quiero actualizar el tx4.Text que es de descripcion pero no me deja porque primero me dice que tiene que actualizar fecha y hora, Quisiera que el txt4.text sea independiente y se pueda actualizar, pero que la validacion de fecha y hora se mantengan.Abajo dejo el codigo que estoy usando seguro me esta faltando modificar algo .Me puedan ayudar

    Gracias


    Protected Sub GridView1_RowUpdating(sender As Object, e As GridViewUpdateEventArgs) Handles GridView1.RowUpdating
            Dim num As TextBox = GridView1.Rows(e.RowIndex).Cells(2).Controls(0)
            Dim tx1 As TextBox = GridView1.Rows(e.RowIndex).Cells(3).Controls(0)
            Dim tx2 As TextBox = GridView1.Rows(e.RowIndex).Cells(4).Controls(0)
            Dim tx3 As TextBox = GridView1.Rows(e.RowIndex).Cells(5).Controls(0)
            Dim tx4 As TextBox = GridView1.Rows(e.RowIndex).Cells(6).Controls(0)

            Dim er As Integer = val_evento(tx3.Text, FormatDateTime(tx2.Text, DateFormat.ShortDate))
            Dim g As String = tx4.Text

            If er = 0 And g <> "" Then

                Try
                    Using oConexion As New OracleConnection(conex)
                        Dim AdoCmd As OracleCommand = New OracleCommand()

                        AdoCmd.Connection = oConexion
                        AdoCmd.CommandText = "AGENDA_PUBLICA_WEB.SP_ACTUALIZAR_AGENDA_PUBLICA_5"
                        AdoCmd.CommandType = CommandType.StoredProcedure
                        AdoCmd.Parameters.AddWithValue("A_ID", num.Text)
                        AdoCmd.Parameters.AddWithValue("A_CARGO", tx1.Text)
                        AdoCmd.Parameters.AddWithValue("A_FECHA", FormatDateTime(tx2.Text, DateFormat.ShortDate))
                        AdoCmd.Parameters.AddWithValue("A_HORA", tx3.Text)
                        AdoCmd.Parameters.AddWithValue("A_DESCRIPCION", tx4.Text)
                        oConexion.Open()
                        AdoCmd.ExecuteNonQuery()
                        oConexion.Close()

                        MsgBox("actualizado")


                    End Using

                Catch ex As Exception
                    MsgBox("NO ACTUALIZADO")

                End Try
                GridView1.EditIndex = -1

                Mantener_tabla()


            Else
                MsgBox("no actualizado")


            End If

        End Sub


    guillermo leon rea

    lunes, 16 de marzo de 2015 16:54

Respuestas

  • hola

    ahh val_evento() era la validacion, pero este retorna un int, porque no retorna un bool indicando true/false si pasa o no la validacion

    igualmente sigo observando que el procedure actualiza todos los dato en conjunto, podrias insertar una fecha y hora invalida en el procedure ?

    porque quizas debas crear un procedure que solo actualice la descripcion entonces harias

    Protected Sub GridView1_RowUpdating(sender As Object, e As GridViewUpdateEventArgs) Handles GridView1.RowUpdating
    	Dim num As TextBox = GridView1.Rows(e.RowIndex).Cells(2).Controls(0)
    	Dim tx1 As TextBox = GridView1.Rows(e.RowIndex).Cells(3).Controls(0)
    	Dim tx2 As TextBox = GridView1.Rows(e.RowIndex).Cells(4).Controls(0)
    	Dim tx3 As TextBox = GridView1.Rows(e.RowIndex).Cells(5).Controls(0)
    	Dim tx4 As TextBox = GridView1.Rows(e.RowIndex).Cells(6).Controls(0)
    
    	Dim er As Integer = val_evento(tx3.Text, FormatDateTime(tx2.Text, DateFormat.ShortDate))
    	Dim g As String = tx4.Text
    
    	If er = 0 Then
    
    		Try
    			Using oConexion As New OracleConnection(conex)
    				Dim AdoCmd As OracleCommand = New OracleCommand()
    
    				AdoCmd.Connection = oConexion
    				AdoCmd.CommandText = "AGENDA_PUBLICA_WEB.SP_ACTUALIZAR_AGENDA_PUBLICA_5"
    				AdoCmd.CommandType = CommandType.StoredProcedure
    				AdoCmd.Parameters.AddWithValue("A_ID", num.Text)
    				AdoCmd.Parameters.AddWithValue("A_CARGO", tx1.Text)
    				AdoCmd.Parameters.AddWithValue("A_FECHA", FormatDateTime(tx2.Text, DateFormat.ShortDate))
    				AdoCmd.Parameters.AddWithValue("A_HORA", tx3.Text)
    				AdoCmd.Parameters.AddWithValue("A_DESCRIPCION", tx4.Text)
    				oConexion.Open()
    				AdoCmd.ExecuteNonQuery()
    				oConexion.Close()
    
    				MsgBox("actualizado")
    
    
    			End Using
    
    		Catch ex As Exception
    			MsgBox("NO ACTUALIZADO")
    
    		End Try
    		
    		
    		GridView1.EditIndex = -1
    
    		Mantener_tabla()
    
    	Else
    		
    		Using oConexion As New OracleConnection(conex)
    			Dim AdoCmd As OracleCommand = New OracleCommand()
    
    			AdoCmd.Connection = oConexion
    			AdoCmd.CommandText = "AGENDA_PUBLICA_WEB.SP_ACTUALIZAR_AGENDA_Descripcion"
    			AdoCmd.CommandType = CommandType.StoredProcedure
    			AdoCmd.Parameters.AddWithValue("A_ID", num.Text)
    			AdoCmd.Parameters.AddWithValue("A_CARGO", tx1.Text)
    			AdoCmd.Parameters.AddWithValue("A_DESCRIPCION", tx4.Text)
    			oConexion.Open()
    			AdoCmd.ExecuteNonQuery()
    			oConexion.Close()
    
    			MsgBox("actualizado")
    
    
    		End Using
    
    
    	End If
    
    End Sub	

    la idea es que invoques un procedure diferente que solo envie la descripcion si es que la fecha y hora no se ingresan

    algunas recomendaciones

    - estas en un entorno web, NUNCA pero absolutamente NUNCA uses un MsgBox(), no puedes usar componente winform en un entorno web

    - defines funciones para encapsular la funcionalidad de invocacion a los procedure

    saludo


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    lunes, 16 de marzo de 2015 17:26

Todas las respuestas

  • hola

    >>quiero actualizar el tx4.Text que es de descripcion pero no me deja porque primero me dice que tiene que actualizar fecha y hora

    pero defienes algun control de validacion sobre estos controles de fecha y hora?

    lo pregunto porque en el codigo que muestras no veo estas validaciones

    ----

    el tema es que si defines controles de validacion y solo tienes una unica accion que seria el update de la row no veo como podrias pasarla por alto

    es mas no veo que diferencies la operacion de actualizar la descripcion con la de actualizar la fecha y hora, sino que defines todo como un conjunto

    cuando actualizas la descripcion tambien actualizas la fecha por lo tanto es correcto que aplique la validacion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 16 de marzo de 2015 17:02
  • Hola leandro

    Para validar fecha y hora defino este procedure

    Public Function val_evento(hor As String, fec As String) As Integer

            Dim oConexion As OracleConnection = New OracleConnection(conex)
            Dim AdoCmd As OracleCommand = New OracleCommand()
            Dim v As Integer
            oConexion.Open()
            AdoCmd.Connection = oConexion
            AdoCmd.CommandText = "AGENDA_PUBLICA_WEB.SP_VALIDAR_AGE_WEB"
            AdoCmd.CommandType = CommandType.StoredProcedure
            AdoCmd.Parameters.Add("V_HORA", OracleType.VarChar).Value = hor
            AdoCmd.Parameters.Add("V_FECHA", OracleType.VarChar).Value = fec
            AdoCmd.Parameters.Add("V_EVEN", OracleType.Int32).Direction = ParameterDirection.Output



            Try
                Dim OrclAdapater As OracleDataAdapter = New OracleDataAdapter(AdoCmd)

                AdoCmd.ExecuteNonQuery()
                v = Convert.ToInt32(AdoCmd.Parameters("V_EVEN").Value)

            Catch ex As Exception
                oConexion.Close()
                v = -1
            End Try
            Return v



        End Function


    guillermo leon rea

    lunes, 16 de marzo de 2015 17:06
  • Este procedure utilizo para validar fecha y hora

    PROCEDURE SP_VALIDAR_AGE_WEB (

      V_HORA    TB_AGENDA_PUBLICA_5.HORA%TYPE,
      V_FECHA  IN VARCHAR2,
      V_EVEN   OUT INTEGER

      )
    AS
    BEGIN

    SELECT COUNT(ID) INTO V_EVEN FROM TB_AGENDA_PUBLICA_5 WHERE HORA=V_HORA AND FECHA=V_FECHA AND NOT ESTADO='E';

    END SP_VALIDAR_AGE_WEB;

        

    guillermo leon rea

    lunes, 16 de marzo de 2015 17:07
  • hola

    ahh val_evento() era la validacion, pero este retorna un int, porque no retorna un bool indicando true/false si pasa o no la validacion

    igualmente sigo observando que el procedure actualiza todos los dato en conjunto, podrias insertar una fecha y hora invalida en el procedure ?

    porque quizas debas crear un procedure que solo actualice la descripcion entonces harias

    Protected Sub GridView1_RowUpdating(sender As Object, e As GridViewUpdateEventArgs) Handles GridView1.RowUpdating
    	Dim num As TextBox = GridView1.Rows(e.RowIndex).Cells(2).Controls(0)
    	Dim tx1 As TextBox = GridView1.Rows(e.RowIndex).Cells(3).Controls(0)
    	Dim tx2 As TextBox = GridView1.Rows(e.RowIndex).Cells(4).Controls(0)
    	Dim tx3 As TextBox = GridView1.Rows(e.RowIndex).Cells(5).Controls(0)
    	Dim tx4 As TextBox = GridView1.Rows(e.RowIndex).Cells(6).Controls(0)
    
    	Dim er As Integer = val_evento(tx3.Text, FormatDateTime(tx2.Text, DateFormat.ShortDate))
    	Dim g As String = tx4.Text
    
    	If er = 0 Then
    
    		Try
    			Using oConexion As New OracleConnection(conex)
    				Dim AdoCmd As OracleCommand = New OracleCommand()
    
    				AdoCmd.Connection = oConexion
    				AdoCmd.CommandText = "AGENDA_PUBLICA_WEB.SP_ACTUALIZAR_AGENDA_PUBLICA_5"
    				AdoCmd.CommandType = CommandType.StoredProcedure
    				AdoCmd.Parameters.AddWithValue("A_ID", num.Text)
    				AdoCmd.Parameters.AddWithValue("A_CARGO", tx1.Text)
    				AdoCmd.Parameters.AddWithValue("A_FECHA", FormatDateTime(tx2.Text, DateFormat.ShortDate))
    				AdoCmd.Parameters.AddWithValue("A_HORA", tx3.Text)
    				AdoCmd.Parameters.AddWithValue("A_DESCRIPCION", tx4.Text)
    				oConexion.Open()
    				AdoCmd.ExecuteNonQuery()
    				oConexion.Close()
    
    				MsgBox("actualizado")
    
    
    			End Using
    
    		Catch ex As Exception
    			MsgBox("NO ACTUALIZADO")
    
    		End Try
    		
    		
    		GridView1.EditIndex = -1
    
    		Mantener_tabla()
    
    	Else
    		
    		Using oConexion As New OracleConnection(conex)
    			Dim AdoCmd As OracleCommand = New OracleCommand()
    
    			AdoCmd.Connection = oConexion
    			AdoCmd.CommandText = "AGENDA_PUBLICA_WEB.SP_ACTUALIZAR_AGENDA_Descripcion"
    			AdoCmd.CommandType = CommandType.StoredProcedure
    			AdoCmd.Parameters.AddWithValue("A_ID", num.Text)
    			AdoCmd.Parameters.AddWithValue("A_CARGO", tx1.Text)
    			AdoCmd.Parameters.AddWithValue("A_DESCRIPCION", tx4.Text)
    			oConexion.Open()
    			AdoCmd.ExecuteNonQuery()
    			oConexion.Close()
    
    			MsgBox("actualizado")
    
    
    		End Using
    
    
    	End If
    
    End Sub	

    la idea es que invoques un procedure diferente que solo envie la descripcion si es que la fecha y hora no se ingresan

    algunas recomendaciones

    - estas en un entorno web, NUNCA pero absolutamente NUNCA uses un MsgBox(), no puedes usar componente winform en un entorno web

    - defines funciones para encapsular la funcionalidad de invocacion a los procedure

    saludo


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    lunes, 16 de marzo de 2015 17:26
  • Hola Leandro

    Cree un Procedure que solo actualice la Descripción y si me funciono, muchas gracias

    Saludos


    guillermo leon rea

    lunes, 16 de marzo de 2015 20:36