jueves, 26 de junio de 2014

Agregar artículos desde una consulta de SQL server y cargarlo a un ListView - Pregunta 3 (Ex.Final LPV 4to Ciclo)

Vamos a desarrollar la pregunta Nº 3 del examen final del curso de Lenguaje de Programación Visual (4to. Ciclo). Para el desarrollo hemos utilizado el Visual Studio 2010 (VBasic .Net). El enunciado es el siguiente:

- Crear la tabla Artículos(codigo, nombre, precio) luego programar un formulario que permita visualizar los artículos en un combo, al seleccionar un artículo se deberá mostrar su precio y su código, para ingresar una cantidad y agregar dicho artículo al ListView a manera de detalles de venta.

Para este caso vamos a utilizar la base de datos Universidad la cual creamos en las anteriores publicaciones. Pueden revisarlo en el siguiente enlace:.
Solución:
1. Abrimos nuestro SQL Server y ejecutamos las siguientes líneas de script para crear nuestra tabla Articulos con su estructura respectiva dentro de la base de datos Universidad.

use universidad;
Go
 create table Articulos
(codigo varchar(5),
nombre varchar (50),
precio decimal(10,2)
);
Go
 Insert into Articulos (codigonombrepreciovalues ('A0001','LICUADORA  OSTER',150.00);
Insert into Articulos (codigonombrepreciovalues ('A0002','MP4 SONY 4GB',120.00);
Insert into Articulos (codigonombrepreciovalues ('A0003','TABLET AOC 4GB',229.00);
Insert into Articulos (codigonombrepreciovalues ('A0004','COCINA MABE 4 HORNILLAS',499.00);

Insert into Articulos (codigonombrepreciovalues ('A0005','TOSTADORA IMACO',47.00);

2. Abrimos el Visual Studio 2010 (Visual Basic .Net) y realizamos los siguientes pasos: 
  • Archivo, nuevo, proyecto…., Visual Basic
  • Seleccionar Aplicación de Windows Forms
  • Colocar de nombre al proyecto VentaArticulos, desactivar la opción Crear directorio para la solución, aceptar.
3. Diseñaremos la siguiente interfaz de usuario y agregaremos los controles respectivos. 
image
- Nos dirigimos a la ventana de propiedades y a cada objeto le asignamos sus propiedades según la siguiente tabla:
Objeto
Propiedad
Valor
Form Text
Name
Venta de Artículos
frmVentaArticulos
Label1 Text ARTICULOS:
Label2 Text CODIGO:
Label3 Text PRECIO:
Label4 Text CANTIDAD:
Label5 Name lblCodigo
Label6 Name lblPrecio
Label7 Text TOTAL:
Label8 Name lblTotal
ComboBox1 Name cboArticulos
TextBox1 Name txtCantidad
ListView1 Name lvwDetalle
Button1 Text
Name
VENDER
btnVender

Procedimientos asociados a eventos de los objetos

Objeto
Evento
Nombre del procedimiento
Form Load frmVentaArticulos_Load
cboArticulos SelectionChangeCommitted cargarCombo
btnVender Click vender
Definidos por el usuario --- llenarListView()

Para crear el procedimiento o métodos ya sabemos que tenemos que dirigirnos a la ventana de propiedades y hacer un en el icono del truenito para visualizar todos los eventos asociados al objeto (control), y podemos poner un nombre específico al método asociado al evento que usaremos. 

4. Nos dirigimos a la ventana de código (haciendo doble clic sobre el formulario) y empezamos a programar:

Imports System.Data.SqlClient
Public Class frmVentaArticulos
    Dim con As SqlConnection
    Dim drd As SqlDataReader
    Dim total As Decimal = 0
    Private Sub frmVentaArticulos_Load(sender As System.Object, e As System.EventArgs)Handles MyBase.Load
        con = New SqlConnection("integrated security=true;server=COMP-PCW01;database=Universidad")
        lblCodigo.Text = ""
        lblPrecio.Text = ""
        lblTotal.Text = ""
        With lvwDetalle
            .Columns.Add("Codigo", 50, HorizontalAlignment.Left)
            .Columns.Add("Producto", 190, HorizontalAlignment.Left)
            .Columns.Add("Precio", 60, HorizontalAlignment.Right)
            .Columns.Add("Cantidad", 70, HorizontalAlignment.Right)
            .Columns.Add("Importe", 100, HorizontalAlignment.Right)
            .View = View.Details
        End With
        Try
            con.Open()
            Dim cmd As SqlCommand = New SqlCommand("Select [codigo],[nombre] From Articulos", con)
            Dim bs As New BindingSource
            drd = cmd.ExecuteReader()
            bs.DataSource = drd
            If Not drd.HasRows Then
                MsgBox("No existen Articulos para vender"MsgBoxStyle.Information)
                cboArticulos.Focus()
                con.Close()
                Return
            End If
            cboArticulos.DataSource = bs
            cboArticulos.DisplayMember = "nombre"
            cboArticulos.ValueMember = "codigo"
            drd.Close()
        Catch ex As SqlException
            Dim er As SqlError
            For Each er In ex.Errors
                MsgBox(er.Message)
            Next
        End Try
        con.Close()
    End Sub
    Private Sub llenarListView()
        Dim fila As New ListViewItem
        fila = lvwDetalle.Items.Add(lblCodigo.Text)
        fila.SubItems.Add(cboArticulos.Text)
        fila.SubItems.Add(lblPrecio.Text)
        fila.SubItems.Add(txtCantidad.Text)
        Dim Importe As Decimal = Decimal.Parse(lblPrecio.Text) *Integer.Parse(txtCantidad.Text)
        fila.SubItems.Add(String.Format(Importe, "f"))
        total += Importe
        lblTotal.Text = String.Format(total, "f")
    End Sub

    Private Sub cargarCombo(sender As System.Object, e As System.EventArgsHandlescboArticulos.SelectionChangeCommitted
        Try
            con.Open()
            Dim cmd As SqlCommand = New SqlCommand("Select [precio] From Articulos where codigo = '" + cboArticulos.SelectedValue.ToString + "'", con)
            drd = cmd.ExecuteReader()
            While drd.Read
                lblCodigo.Text = cboArticulos.SelectedValue
                lblPrecio.Text = drd(0).ToString
            End While
            drd.Close()
        Catch ex As SqlException
            Dim er As SqlError
            For Each er In ex.Errors
                MsgBox(er.Message)
            Next
        End Try
        con.Close()
    End Sub

    Private Sub vender(sender As System.Object, e As System.EventArgsHandlesbtnVender.Click
        If lblCodigo.Text = "" Or Not IsNumeric(Val(txtCantidad.Text)) Or Val(txtCantidad.Text) <= 0 Then
            MsgBox("Seleccione un Articulo e Ingrese la cantidad a Vender",MsgBoxStyle.Exclamation)
            cboArticulos.Focus()
            Return
        End If
        llenarListView()
    End Sub
End Class

5. Para ejecutarlo debemos de seleccionar un articulo del combo, luego colocar la cantidad y finalmente hacer clic en Vender para que se cargue el ListView. El formulario en ejecución es el siguiente:

image
Cualquier consulta no duden en hacerlo y si les gusto entonces recomiéndenlo.

Ojo: Nos e olviden de hacer los cambios en la cadena de conexión con los datos de su computador.

No hay comentarios:

Publicar un comentario