none
Modificar dos campos seleccionados en un datagridview

    Pregunta

  • Hola a todos, tengo una nueva consulta. Tengo una tabla llamada "Tbl_Proyecto", que como se imaginaran, tendrá varios registros. Dos de sus campos, "Estado_Factura" y "Estado Proyecto", pueden cambiar a "Facturado" o "Sin Facturar", y "Proyecto Terminado" o "Proyecto En Marcha".

    Hasta el momento puedo mostrar en un datagridview todos los proyectos que se encuentran registrados, también seleccionar  un proyecto especifico gracias a combobox anidados y que al seleccionar una fila del datagridview me muestre en dos campos texto sus respectivos estados de "proyecto" y "factura". Ahora lo que nesecito es que al tener estos campos en los textbox los pueda modificar, seleccionando otro estado que ya viene precargado en dos combobox. Estos combobox se encuetran al lado de estos campos textbox.

    Les dejo el codigo que tengo para ver si alguien me puede ayudar, y tambien una imagen del formulario.

    Public Class Consulta_Proyectos
        Inherits Form
        Dim cmd As New SqlCommand
        Dim cn As New SqlConnection(My.Settings.Conexion_Rendiciones)
        Dim variable As SqlDataReader
        Dim dt As New DataTable
    
        Public Sub New()
            InitializeComponent()
        End Sub
    
        Private Sub Consulta_Proyectos_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            load_cbx_cliente()
            MaximizeBox = False
            MinimizeBox = False
            Load_proyectos()
        End Sub
    
        Private Sub load_cbx_cliente()
            cbx_cliente.DataSource = Conexion.Listar_Clientes()
            cbx_cliente.DisplayMember = "Nombre"
            cbx_cliente.ValueMember = "ClienteRut"
            If cbx_cliente.Items.Count <> 0 Then
                Dim Cliente_RUT As String = Convert.ToString(cbx_cliente.SelectedValue)
                load_cbxNombreProyecto(Cliente_RUT)
            Else
                cbx_proyecto.DataSource = Nothing
            End If
        End Sub
    
        Private Sub cbx_cliente_SelectionChangeCommitted(sender As Object, e As System.EventArgs) Handles cbx_cliente.SelectionChangeCommitted
            Dim Cliente_RUT As String = Convert.ToString(cbx_cliente.SelectedValue)
            load_cbxNombreProyecto(Cliente_RUT)
        End Sub
    
        Private Sub cbx_proyecto_SelectionChangeCommitted(sender As Object, e As System.EventArgs) Handles cbx_proyecto.SelectionChangeCommitted
            Dim Proyecto_CentroCosto As String = Convert.ToString(cbx_proyecto.SelectedValue)
            LoadGridViewProyecto(Proyecto_CentroCosto)
        End Sub
    
        Private Sub load_cbxNombreProyecto(ByVal Cliente_RUT As String)
            cbx_proyecto.DataSource = Conexion.ListarProyectos(Cliente_RUT)
            cbx_proyecto.DisplayMember = "Descripcion_Proyecto"
            cbx_proyecto.ValueMember = "Centro_Costo"
            If cbx_cliente.Items.Count <> 0 Then
                Dim Proyecto_CentroCosto As String = Convert.ToString(cbx_proyecto.SelectedValue)
                LoadGridViewProyecto(Proyecto_CentroCosto)
            Else
                Dgv_Proyectos.DataSource = Nothing
            End If
        End Sub
    
        Private Sub LoadGridViewProyecto(Proyecto_CentroCosto As String)
            Dgv_Proyectos.DataSource = Conexion.obtenerdatagridview(Proyecto_CentroCosto)
        End Sub
    
       Private Sub Load_proyectos()
            Using cn As New SqlConnection(My.Settings.Conexion_Rendiciones)
                Dim cmd As New SqlCommand("SP_Listar_Datagrid_Proyectos_Todos", cn)
                cmd.CommandType = CommandType.StoredProcedure
                Dim da As New SqlDataAdapter(cmd)
                Dim DS As New DataSet
                da.Fill(DS, "Tbl_Proyecto")
                Me.Dgv_Proyectos.DataSource = DS.Tables("Tbl_Proyecto")
            End Using
        End Sub
    
        Private Sub Dgv_Proyectos_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles Dgv_Proyectos.CellClick
            Txt_Estado_Proyecto.Text = Me.Dgv_Proyectos.CurrentRow.Cells(14).Value.ToString
            txt_Estado_Factura.Text = Me.Dgv_Proyectos.CurrentRow.Cells(11).Value.ToString
            cbx_cliente.Text = Me.Dgv_Proyectos.CurrentRow.Cells(0).Value.ToString
            cbx_proyecto.Text = Me.Dgv_Proyectos.CurrentRow.Cells(1).Value.ToString
        End Sub
        
        Private Sub Btn_Modificar_Click(sender As System.Object, e As System.EventArgs) Handles Btn_Modificar.Click
            If MsgBox("Deseas Modificar el Registro?", MsgBoxStyle.YesNo, "Aviso") = MsgBoxResult.Yes Then
            End If
        End Sub
    
     Private Sub Btn_Limpiar_Click(sender As System.Object, e As System.EventArgs) Handles Btn_Limpiar.Click
            load_cbx_cliente()
            Load_proyectos()
            cbx_cliente.Text = " "
            cbx_proyecto.Text = " "
            txt_Estado_Factura.Clear()
            Txt_Estado_Proyecto.Clear()
        End Sub
    End Class


    • Editado adriian.91 martes, 10 de enero de 2017 14:28
    martes, 10 de enero de 2017 14:27

Respuestas

  • Hasta donde veo deberías actualizar tu tabla enviando en un método el código de la tabla y los valores del value que selecciones

      Private Sub Btn_Modificar_Click(sender As Object, e As EventArgs) Handles Btn_Modificar.Click
            If MsgBox("Deseas Modificar el Registro?", MsgBoxStyle.YesNo, "Aviso") = MsgBoxResult.Yes Then
                Dim indice As Int32 = DataGridView1.CurrentCell.RowIndex
                Dim codigo As String = DataGridView1.Rows(indice).Cells("NombredeColumnaConCodigo").Value
                MetodoModificar(codigo, cboEstadoproecto.SelectedValue, cboEstadoFactura.SelectedValue)
                RecargarGrilla()
            End If
        End Sub

    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala. Solo dejo en el foro mis post si fueron útiles , de lo contrario y por mantener el orden los borro. Saludos. Lima-Perú.

    • Editado Augusto1982 martes, 10 de enero de 2017 16:33 corregir código
    • Marcado como respuesta adriian.91 miércoles, 11 de enero de 2017 14:26
    martes, 10 de enero de 2017 16:25
  • Te agradezco augusto, tu respuesta me oriento a como resolver mi problema, dejo el código con la solución 

    Private Sub Btn_Modificar_Click(sender As System.Object, e As System.EventArgs) Handles Btn_Modificar.Click
            modificar_estado_proyecto_factura()
            Load_proyectos()
            limpiar()
        End Sub
        Private Sub modificar_estado_proyecto_factura()
            Using cn As New SqlConnection(My.Settings.Conexion_Rendiciones)
                cn.Open()
                If MsgBox("Deseas Modificar el Registro?", MsgBoxStyle.YesNo, "Aviso") = MsgBoxResult.Yes Then
                    Try
                        Dim cmd As New SqlCommand("SP_modificar_estado_Proyecto_Factura", cn)
                        cmd.CommandType = CommandType.StoredProcedure
                        cmd.Parameters.AddWithValue("@Centro_costo", cbx_proyecto.SelectedValue)
                        cmd.Parameters.AddWithValue("@Status_Factura", cbx_estado_factura.Text)
                        cmd.Parameters.AddWithValue("@Estado_Proyecto", cbx_estado_proyecto.Text)
                        cmd.ExecuteNonQuery()
                        MessageBox.Show("Registros Modificados")
                    Catch generatedExceptionName As Exception
                        Throw
                    End Try
                End If
            End Using
        End Sub

    • Marcado como respuesta adriian.91 miércoles, 11 de enero de 2017 14:26
    miércoles, 11 de enero de 2017 14:01

Todas las respuestas

  • Hola, analiza ese código y adáptalo a tus necesidades, con ello cargas un combobox y en el evento change_commited,capturas el valor del Display del combobox

    Public Class Form5
        Private Sub Form5_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim dt As New DataTable
            dt.Columns.Add("id", GetType(Int32))
            dt.Columns.Add("descripcion", GetType(String))
            dt.Rows.Add(1, "valor 1")
            dt.Rows.Add(2, "valor 2")
            ComboBox1.DisplayMember = "descripcion"
            ComboBox1.ValueMember = "id"
            ComboBox1.DataSource = dt
            Dim dr As DataRow = dt.NewRow
            dr("id") = 0
            dr("descripcion") = "SELECCIONE"
            dt.Rows.InsertAt(dr, 0)
            ComboBox1.SelectedValue = 0
        End Sub
    
        Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBox1.SelectionChangeCommitted
            TextBox1.Text = ComboBox1.GetItemText(ComboBox1.Items(ComboBox1.SelectedIndex))
        End Sub
    End Class

    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala. Solo dejo en el foro mis post si fueron útiles , de lo contrario y por mantener el orden los borro. Saludos. Lima-Perú.

    • Editado Augusto1982 martes, 10 de enero de 2017 15:06 agregar código
    • Propuesto como respuesta Joyce_ACModerator martes, 10 de enero de 2017 15:41
    • Votado como útil adriian.91 martes, 10 de enero de 2017 15:44
    martes, 10 de enero de 2017 14:58
  • disculpa, pero lo que me respondiste ya lo esta haciendo mi programa. lo que nesecito es cambiar la columna "estado_proyecto" del proyecto seleccionado en el datagridview.
    martes, 10 de enero de 2017 15:31
  • Hola, pero esto es lo que solicitabas según entendí

    "...Ahora lo que nesecito es que al tener estos campos en los textbox los pueda modificar, seleccionando otro estado que ya viene precargado en dos combobox. Estos combobox se encuetran al lado de estos campos textbox...."  

    bueno y ahora solicitas

    "..lo que nesecito es cambiar la columna "estado_proyecto" ..."

    Entonces necesitas un combobox en la grilla?



    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala. Solo dejo en el foro mis post si fueron útiles , de lo contrario y por mantener el orden los borro. Saludos. Lima-Perú.

    martes, 10 de enero de 2017 15:45
  • Augusto Disculpa si no me explique bien, tratare de hacerlo nuevamente. Tengo una tabla llamada proyectos con muchos campos, entre ellos "Estado_Proyecto" y "Estado_Factura". El ususario que trabajara con el sistema debe tener la opcion de que cuando el proyecto se haya terminado pueda cambiar su estado a obviamente "Terminado", el estado que viene por defecto al crear un proyecto es "En Marcha", lo mismo ocurre con "Estado_Factura". Ahora tengo la gran mayoria del codigo como te habras dado cuenta, solo me falta que el usuario pueda cambiar los estados seleccionando una fila del datagridview y tomando como nuevo valor el texto de los combobox. 

     Private Sub Btn_Modificar_Click(sender As System.Object, e As System.EventArgs) Handles Btn_Modificar.Click
            If MsgBox("Deseas Modificar el Registro?", MsgBoxStyle.YesNo, "Aviso") = MsgBoxResult.Yes Then
            End If
        End Sub


    • Editado adriian.91 martes, 10 de enero de 2017 15:53
    martes, 10 de enero de 2017 15:52
  • Hasta donde veo deberías actualizar tu tabla enviando en un método el código de la tabla y los valores del value que selecciones

      Private Sub Btn_Modificar_Click(sender As Object, e As EventArgs) Handles Btn_Modificar.Click
            If MsgBox("Deseas Modificar el Registro?", MsgBoxStyle.YesNo, "Aviso") = MsgBoxResult.Yes Then
                Dim indice As Int32 = DataGridView1.CurrentCell.RowIndex
                Dim codigo As String = DataGridView1.Rows(indice).Cells("NombredeColumnaConCodigo").Value
                MetodoModificar(codigo, cboEstadoproecto.SelectedValue, cboEstadoFactura.SelectedValue)
                RecargarGrilla()
            End If
        End Sub

    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala. Solo dejo en el foro mis post si fueron útiles , de lo contrario y por mantener el orden los borro. Saludos. Lima-Perú.

    • Editado Augusto1982 martes, 10 de enero de 2017 16:33 corregir código
    • Marcado como respuesta adriian.91 miércoles, 11 de enero de 2017 14:26
    martes, 10 de enero de 2017 16:25
  • Te agradezco augusto, tu respuesta me oriento a como resolver mi problema, dejo el código con la solución 

    Private Sub Btn_Modificar_Click(sender As System.Object, e As System.EventArgs) Handles Btn_Modificar.Click
            modificar_estado_proyecto_factura()
            Load_proyectos()
            limpiar()
        End Sub
        Private Sub modificar_estado_proyecto_factura()
            Using cn As New SqlConnection(My.Settings.Conexion_Rendiciones)
                cn.Open()
                If MsgBox("Deseas Modificar el Registro?", MsgBoxStyle.YesNo, "Aviso") = MsgBoxResult.Yes Then
                    Try
                        Dim cmd As New SqlCommand("SP_modificar_estado_Proyecto_Factura", cn)
                        cmd.CommandType = CommandType.StoredProcedure
                        cmd.Parameters.AddWithValue("@Centro_costo", cbx_proyecto.SelectedValue)
                        cmd.Parameters.AddWithValue("@Status_Factura", cbx_estado_factura.Text)
                        cmd.Parameters.AddWithValue("@Estado_Proyecto", cbx_estado_proyecto.Text)
                        cmd.ExecuteNonQuery()
                        MessageBox.Show("Registros Modificados")
                    Catch generatedExceptionName As Exception
                        Throw
                    End Try
                End If
            End Using
        End Sub

    • Marcado como respuesta adriian.91 miércoles, 11 de enero de 2017 14:26
    miércoles, 11 de enero de 2017 14:01
  • Hola adriian.91, me alegro que hayas solucionado el problema.

    Recuerda marcar las respuestas que te ayudaron incluso si consideras que fue uno de tus post, para que un moderador no lo haga, no sabes las discusiones que ello genera....

    Suerte y éxitos!



    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala. Solo dejo en el foro mis post si fueron útiles , de lo contrario y por mantener el orden los borro. Saludos. Lima-Perú.

    miércoles, 11 de enero de 2017 14:14