es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Editar, actualizar y mostrar DataTable en Datagridview al mismo tiempo en VB.net

Hice una tabla de datos así:

 

  Dim DTCart como nuevo DataTable

    DTCart.Columns.Add(New DataColumn With {.ColumnName = "Code", .DataType = GetType(String)})
    DTCart.Columns.Add(New DataColumn With {.ColumnName = "Name", .DataType = GetType(String)})
    DTCart.Columns.Add(New DataColumn With {.ColumnName = "Amount", .DataType = GetType(Double)})
    DTCart.Columns.Add(New DataColumn With {.ColumnName = "Price", .DataType = GetType(Long)})
    DTCart.Columns.Add(New DataColumn With {.ColumnName = "Total", .DataType = GetType(Long), .Expression = "Amount * Price"})

    DTCart.Columns("Code").ReadOnly = True
    DTCart.Columns("Name").ReadOnly = True
    DTCart.Columns("Amount").ReadOnly = False
    DTCart.Columns("Price").ReadOnly = True
    DTCart.Columns("Total").ReadOnly = True
  

 Luego muestro la tabla de datos en Datagridview usando  DataGridView.DataSource = DTCart 

 Configuré la columna 'Amount' para que sea editable, para que pueda actualizarla editando la celda en Datagridview así:

 
  Sub DataGridViewCart_CellEndEdit (sender As Object, e As DataGridViewCellEventArgs) Handles DataGridViewCart.CellEndEdit
    If DataGridViewCart.CurrentRow.Cells(2).Value.ToString = "" Entonces
        DataGridViewCart.CurrentRow.Cells(2).Value = 0
    Fin si

    Dim FindRow () As DataRow = DTCart.Select ("Code = '" & DataGridViewCart.CurrentRow.Cells (0) .Value & "'")
    FindRow (0) ("Amount") = DataGridViewCart.CurrentRow.Cells (2) .Value

    Total ()
End Sub>  

 El método 'Total ()' es solo un método para sumar la columna 'Total' en DataTable para que pueda establecer el texto específico de una etiqueta en su valor así:

 
  Sub Total ()
    Dim sum As Double = 0
    Para cada fila como DataRow en DTCart.Rows
        suma += fila.Elemento ("Total")
    Siguiente

    LabelTotal.Text = suma
End Sub>  

 Ahora, el problema es que cuando termino de editar la celda, el DataTable se actualiza (lo verifiqué), pero LabelTotal.Text no lo hace.

 Lo curioso es que este problema solo ocurre la primera vez que edito la celda. Cuando intenté editar la misma celda por segunda vez, funciona perfectamente, todo se actualiza.

 Ayuda... : ' (

 Lo siento por mi mal inglés

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema ocurre porque estás intentando actualizar el texto de la etiqueta antes de que el DataGridView haya completado la actualización de la DataTable.

    Para resolver este problema, puedes intentar llamar al método Total() después de que el DataGridView haya actualizado la DataTable manejando el evento CellValueChanged en lugar del evento CellEndEdit de esta manera:

    Private Sub DataGridViewCart_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridViewCart.CellValueChanged
        If e.ColumnIndex = 2 Then
            If DataGridViewCart.CurrentRow.Cells(2).Value.ToString = "" Then
                DataGridViewCart.CurrentRow.Cells(2).Value = 0
            End If
    
            Dim FindRow() As DataRow = DTCart.Select("Code='" & DataGridViewCart.CurrentRow.Cells(0).Value & "'")
            FindRow(0)("Amount") = DataGridViewCart.CurrentRow.Cells(2).Value
    
            Total()
        End If
    End Sub
    

    Este código solo actualizará el método Total() cuando se edite la columna Amount. Al manejar el evento CellValueChanged, el DataGridView ya habrá actualizado la DataTable antes de que se llame al método Total(), asegurando que el texto de la etiqueta se actualice correctamente.

Comments are closed.