none
Como manipular el DataGridViewCheckBoxCell para agregar y borrar desde el datagridview RRS feed

  • Pregunta

  • Buen día Expertos, estoy derarrollando en vb.net 2012 y quisiera saber si me podrian ayudar con este problemita:

    Necesito que al ingresarle el check al estado este envie al siguiente datgridview (dgDetalleOC).

    - si envía al darle el check pero al quitarle el check necesito que el la dgdetalleOC me pueda desaparecer para poder ingresar solo el correcto 

    - y que solo se pueda seleccionar a una sola fila no a varias.

    este es mi codigo hasta el momento:

        Private Sub dgSeleccionProveedor_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles dgSeleccionProveedor.CellValueChanged
            Dim rowSelected As New List(Of DataGridViewRow)()
            For Each row As DataGridViewRow In dgSeleccionProveedor.Rows
                Dim cellselection As DataGridViewCheckBoxCell = TryCast(row.Cells(10), DataGridViewCheckBoxCell)

                If Convert.ToBoolean(cellselection.Value) Then
                    rowSelected.Add(row)
                End If
            Next
            For Each row As DataGridViewRow In rowSelected
                dgDetalleOC.Rows.Add(New Object() {row.Cells(12).Value.ToString(), row.Cells(1).Value.ToString(), row.Cells(2).Value.ToString(), row.Cells(3).Value.ToString(), row.Cells(4).Value.ToString(), row.Cells(5).Value.ToString()})
            Next
        End Sub

        Private Sub dgSeleccionProveedor_CurrentCellDirtyStateChanged(sender As Object, e As EventArgs) Handles dgSeleccionProveedor.CurrentCellDirtyStateChanged
            If dgSeleccionProveedor.IsCurrentCellDirty Then
                dgSeleccionProveedor.CommitEdit(DataGridViewDataErrorContexts.Commit)
            End If
        End Sub

    la visualizacion del formulario del vb.net:

    de antemano gracias por la ayuda.

    lunes, 6 de mayo de 2019 18:02

Respuestas

  • Hola:
    Prueba este ejemplo, a ver si te sirve de inspiracion
    En un Form como el de la imagen


    Copia y pega el siguiente código

    Public Class Form2
        Private mdtProveedores As New DataTable
        Private mdtItems As New DataTable
        Private miFilaSeleccionada As Integer
        Private Sub Form2_Load(sender As Object, e As EventArgs) Handles Me.Load
            Me.dgvProveedores.AllowUserToAddRows = False
            Me.dgvItems.AllowUserToAddRows = False
            Me.dgvItems.Enabled = False
            'Añadimos las columnas.
            mdtProveedores.Columns.Add(New DataColumn("Id", Type.GetType("System.Int16")))
            mdtProveedores.Columns.Add(New DataColumn("Nombre", Type.GetType("System.String")))
            mdtProveedores.Columns.Add(New DataColumn("Valor", Type.GetType("System.Int32")))
            mdtProveedores.Columns.Add(New DataColumn("Estado", Type.GetType("System.Boolean")))
            ' Añadimos los datos
            Dim lDataRow As DataRow = mdtProveedores.NewRow
            lDataRow.Item("Id") = 1
            lDataRow.Item("Nombre") = "Sanchez"
            lDataRow.Item("Valor") = 11111
            lDataRow.Item("Estado") = False
            mdtProveedores.Rows.Add(lDataRow)
            '
            lDataRow = mdtProveedores.NewRow
            lDataRow.Item("Id") = 2
            lDataRow.Item("Nombre") = "Casado"
            lDataRow.Item("Valor") = 22222
            lDataRow.Item("Estado") = False
            mdtProveedores.Rows.Add(lDataRow)
            '
            lDataRow = mdtProveedores.NewRow
            lDataRow.Item("Id") = 3
            lDataRow.Item("Nombre") = "Rivera"
            lDataRow.Item("Valor") = 33333
            lDataRow.Item("Estado") = False
            mdtProveedores.Rows.Add(lDataRow)
            '
            lDataRow = mdtProveedores.NewRow
            lDataRow.Item("Id") = 4
            lDataRow.Item("Nombre") = "Iglesias"
            lDataRow.Item("Valor") = 44444
            lDataRow.Item("Estado") = False
            mdtProveedores.Rows.Add(lDataRow)
            '
            Me.dgvProveedores.DataSource = mdtProveedores
            'Copiar la estructura del datatable
            mdtItems = mdtProveedores.Clone
            Me.dgvItems.DataSource = mdtItems
        End Sub
        Private Sub dgvProveedores_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvProveedores.CellClick
            If e.RowIndex = -1 Then
                Return
            End If
            ' si la columa NO es estado
            If e.ColumnIndex <> 3 Then
                Return
            End If
            If Me.dgvItems.Rows.Count > 0 Then
                MessageBox.Show("Hay Proveedor seleccionado, quitar dicho Item")
                Return
            End If
            mdtItems.Clear()
            Dim loFila As DataGridViewRow = Me.dgvProveedores.CurrentRow()
            miFilaSeleccionada = e.RowIndex
            'Añadir fila a Items
            Dim lDataRow As DataRow = mdtItems.NewRow
            lDataRow.Item("Id") = loFila.Cells("id").Value
            lDataRow.Item("Nombre") = loFila.Cells("Nombre").Value
            lDataRow.Item("Valor") = loFila.Cells("Valor").Value
            lDataRow.Item("Estado") = loFila.Cells("Estado").Value
            mdtItems.Rows.Add(lDataRow)
            Me.dgvProveedores.Enabled = False
            Me.dgvItems.Enabled = True
        End Sub
        Private Sub dgvItems_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvItems.CellClick
            If e.RowIndex = -1 Then
                Return
            End If
            ' si la columa NO es estado
            If e.ColumnIndex <> 3 Then
                Return
            End If
            Dim FilaProveedor As DataRow = mdtProveedores(miFilaSeleccionada)
            FilaProveedor("Estado") = False
            '
            mdtItems.Clear()
            Me.dgvProveedores.Enabled = True
            Me.dgvItems.Enabled = False
        End Sub

    End Class

    P.D.
    Prueba a jugar haciendo click sobre las columnas tipo CheckBox

    Un saludo desde Bilbo
    Carlos


    • Editado J. Carlos Herrero lunes, 6 de mayo de 2019 19:06
    • Propuesto como respuesta Carlos_Ruiz_M lunes, 6 de mayo de 2019 19:13
    • Marcado como respuesta mario gr lunes, 6 de mayo de 2019 19:24
    lunes, 6 de mayo de 2019 19:04

Todas las respuestas

  • Hola:
    Prueba este ejemplo, a ver si te sirve de inspiracion
    En un Form como el de la imagen


    Copia y pega el siguiente código

    Public Class Form2
        Private mdtProveedores As New DataTable
        Private mdtItems As New DataTable
        Private miFilaSeleccionada As Integer
        Private Sub Form2_Load(sender As Object, e As EventArgs) Handles Me.Load
            Me.dgvProveedores.AllowUserToAddRows = False
            Me.dgvItems.AllowUserToAddRows = False
            Me.dgvItems.Enabled = False
            'Añadimos las columnas.
            mdtProveedores.Columns.Add(New DataColumn("Id", Type.GetType("System.Int16")))
            mdtProveedores.Columns.Add(New DataColumn("Nombre", Type.GetType("System.String")))
            mdtProveedores.Columns.Add(New DataColumn("Valor", Type.GetType("System.Int32")))
            mdtProveedores.Columns.Add(New DataColumn("Estado", Type.GetType("System.Boolean")))
            ' Añadimos los datos
            Dim lDataRow As DataRow = mdtProveedores.NewRow
            lDataRow.Item("Id") = 1
            lDataRow.Item("Nombre") = "Sanchez"
            lDataRow.Item("Valor") = 11111
            lDataRow.Item("Estado") = False
            mdtProveedores.Rows.Add(lDataRow)
            '
            lDataRow = mdtProveedores.NewRow
            lDataRow.Item("Id") = 2
            lDataRow.Item("Nombre") = "Casado"
            lDataRow.Item("Valor") = 22222
            lDataRow.Item("Estado") = False
            mdtProveedores.Rows.Add(lDataRow)
            '
            lDataRow = mdtProveedores.NewRow
            lDataRow.Item("Id") = 3
            lDataRow.Item("Nombre") = "Rivera"
            lDataRow.Item("Valor") = 33333
            lDataRow.Item("Estado") = False
            mdtProveedores.Rows.Add(lDataRow)
            '
            lDataRow = mdtProveedores.NewRow
            lDataRow.Item("Id") = 4
            lDataRow.Item("Nombre") = "Iglesias"
            lDataRow.Item("Valor") = 44444
            lDataRow.Item("Estado") = False
            mdtProveedores.Rows.Add(lDataRow)
            '
            Me.dgvProveedores.DataSource = mdtProveedores
            'Copiar la estructura del datatable
            mdtItems = mdtProveedores.Clone
            Me.dgvItems.DataSource = mdtItems
        End Sub
        Private Sub dgvProveedores_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvProveedores.CellClick
            If e.RowIndex = -1 Then
                Return
            End If
            ' si la columa NO es estado
            If e.ColumnIndex <> 3 Then
                Return
            End If
            If Me.dgvItems.Rows.Count > 0 Then
                MessageBox.Show("Hay Proveedor seleccionado, quitar dicho Item")
                Return
            End If
            mdtItems.Clear()
            Dim loFila As DataGridViewRow = Me.dgvProveedores.CurrentRow()
            miFilaSeleccionada = e.RowIndex
            'Añadir fila a Items
            Dim lDataRow As DataRow = mdtItems.NewRow
            lDataRow.Item("Id") = loFila.Cells("id").Value
            lDataRow.Item("Nombre") = loFila.Cells("Nombre").Value
            lDataRow.Item("Valor") = loFila.Cells("Valor").Value
            lDataRow.Item("Estado") = loFila.Cells("Estado").Value
            mdtItems.Rows.Add(lDataRow)
            Me.dgvProveedores.Enabled = False
            Me.dgvItems.Enabled = True
        End Sub
        Private Sub dgvItems_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvItems.CellClick
            If e.RowIndex = -1 Then
                Return
            End If
            ' si la columa NO es estado
            If e.ColumnIndex <> 3 Then
                Return
            End If
            Dim FilaProveedor As DataRow = mdtProveedores(miFilaSeleccionada)
            FilaProveedor("Estado") = False
            '
            mdtItems.Clear()
            Me.dgvProveedores.Enabled = True
            Me.dgvItems.Enabled = False
        End Sub

    End Class

    P.D.
    Prueba a jugar haciendo click sobre las columnas tipo CheckBox

    Un saludo desde Bilbo
    Carlos


    • Editado J. Carlos Herrero lunes, 6 de mayo de 2019 19:06
    • Propuesto como respuesta Carlos_Ruiz_M lunes, 6 de mayo de 2019 19:13
    • Marcado como respuesta mario gr lunes, 6 de mayo de 2019 19:24
    lunes, 6 de mayo de 2019 19:04
  • buen dia carlos, jajaja no es tal ves el codigo que esperaba pero el resultado es parecido solo cambia talvez la estetica del diseño pero funciona perfectamente, se te agradece bastante.
    lunes, 6 de mayo de 2019 19:25