Principales respuestas
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
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
-
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
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
-
-
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ú.
-
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
-
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
-
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
-
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ú.