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
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:
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.