A continuacion tenemos una ejemplo con LINQ y CurrencyManager que nos permitirá actualizar los datos de una lista genérica, esto también se pude trabajar con datos extraídos desde una base de datos.
Código fuente
Paso 1: Creamos una clase llamada oProducto
Public Class oProducto
Public Property Codigo As Integer
Public Property producto As String
Public Property precio As Double
Public Property cantidad As Integer
Public Property estado As String
End Class
Paso 2: Declaramos una variable de tipo Lista
Dim loProducto As New List(Of oProducto)
Paso 3: Programamos el botón agregar
Private Sub btnAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregar.Click
Try
'Capturamos el text del btnAgregar
Dim oControl As Control = sender
Select Case oControl.Text
Case "Agregar"
'Declaramos una variable de tipo oProducto, luego asignamos los valores de los textbox
Dim oProducto As New oProducto
With oProducto
.Codigo = txtCodigo.Text
.producto = txtProducto.Text
.cantidad = CInt(txtCantidad.Text)
.precio = CDbl(txtPrecio.Text)
'Verificamos si el chekEstado esta seleccionado
'se le asignara Activo de lo contrario sera Inactivo
.estado = If(chkEstado.Checked = True, "Activo", "Inactivo")
End With
'Agregamos los elementos de la clase a la lista de oProducto
loProducto.Add(oProducto)
'llamamos al procediento
Listar_productos()
'invocamos al evento Click del boton Nuevo
btnNuevo_Click(sender, e)
Case Else
'Capturamos el valor del txtCodigo ,
'que permitira filtra cual elemto de la clase vamos a actulizar
Dim oCodigo As Integer = CInt(txtCodigo.Text)
'Mediente LINQ filtramos el elemento por su codigo
Dim query = (From p In loProducto
Where p.Codigo = oCodigo).Single
'Asignamos los nuevos valores a la elemetos de la clase
query.producto = txtProducto.Text
query.precio = txtPrecio.Text
query.cantidad = txtCantidad.Text
query.estado = If(chkEstado.Checked = True, "Activo", "Inactivo")
'Actualizamos los nuevos datos de la clase oProducto
Dim cm As CurrencyManager
cm = Me.BindingContext(loProducto)
cm.Refresh()
'llamamos al procediento donde se encuentar los productos
Listar_productos()
'invocamos al evento Click del boton Nuevo
btnNuevo_Click(sender, e)
End Select
Catch ex As Exception
MessageBox.Show("Error al registrar producto.", "vb.net", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Paso 4: Creamos una procedimiento que permita listar los datos de la clase
Sub Listar_productos()
Try
'si la lista de objetos es diferente de Nothing
If (loProducto IsNot Nothing) Then
'Borramos los rows del datagridview
dtgProductos.Rows.Clear()
'loProducto.count , podremos saber cuantos elemento contiene nuestra clase
For rows As Integer = 0 To loProducto.Count - 1
dtgProductos.Rows.Add()
'asignamos los valores
dtgProductos("txt_dtgCodigo", rows).Value = loProducto(rows).Codigo
dtgProductos("txt_dtgProducto", rows).Value = loProducto(rows).producto
dtgProductos("txt_dtgCantidad", rows).Value = loProducto(rows).cantidad
dtgProductos("txt_dtgPrecio", rows).Value = loProducto(rows).precio
dtgProductos("txt_dtgEstado", rows).Value = loProducto(rows).estado
Next
End If
Catch ex As Exception
MessageBox.Show("Error mientras se listaba los productos...", "vb.net", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Paso 5: Programamos el botón nuevo
Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click
btnAgregar.Text = "Agregar"
txtCodigo.Clear()
txtProducto.Clear()
txtCantidad.Clear()
txtPrecio.Clear()
chkEstado.Checked = True
txtCodigo.Focus()
End Sub
Paso 6: Cuando el usuario selección e una celda del gridview, asignaremos los valores a los textos
Private Sub dtgProductos_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dtgProductos.CellClick
Try
'Si el rosIndex es mayor de 0 , asignara a los textbox el valor de las celdas de la datagridview
If (e.RowIndex > -1) Then
txtCodigo.Text = CInt(dtgProductos("txt_dtgCodigo", e.RowIndex).Value)
txtProducto.Text = dtgProductos("txt_dtgProducto", e.RowIndex).Value
txtCantidad.Text = dtgProductos("txt_dtgCantidad", e.RowIndex).Value
txtPrecio.Text = dtgProductos("txt_dtgPrecio", e.RowIndex).Value
chkEstado.Checked = If(dtgProductos("txt_dtgEstado", e.RowIndex).Value = "Activo", True, False)
'cambiamos el text del botón btnAgregar
btnAgregar.Text = "Actualizar"
End If
Catch ex As Exception
MessageBox.Show("Error", "vb.net", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Resultado
En esta imagen se muestra los datos de la lista actualizados y como podremos ver el Estado del "producto D" se muestra Inactivo de esta forma podemos actualizar los elementos de la lista genérica.
No hay comentarios:
Publicar un comentario