Listview
El control ListView de formularios Windows Forms muestra una lista de
elementos con iconos. Puede utilizar una vista de lista para crear una
interfaz de usuario similar al panel derecho del Explorador de Windows.
El control tiene cuatro modos de vista: LargeIcon, SmallIcon, List y
Details. El modo LargeIcon muestra iconos grandes junto al texto de los
elementos; si el control es lo suficientemente grande, los elementos
aparecen en varias columnas. El modo SmallIcon es igual, pero muestra
iconos pequeños. El modo List muestra iconos pequeños, pero siempre
en una sola columna. El modo Details muestra los elementos en varias
columnas.
La propiedad clave del control ListView es Items, que contiene los
elementos que muestra el control. La propiedad
SelectedItems contiene la colección de elementos seleccionados
actualmente en el control. Si la propiedad MultiSelect se establece en
true, el usuario puede seleccionar varios elementos, por ejemplo,
para arrastrar y colocar en otro control varios elementos a la vez. Si
la propiedad CheckBoxes se establece en true, el control ListView puede
mostrar casillas de verificación junto a los elementos.La propiedad
Activation determina el tipo de acción que debe realizar el usuario para
activar los elementos de la lista: las opciones son Standard, OneClick
y TwoClick. La activación OneClick necesita un solo clic para
activar el elemento. La activación TwoClick requiere que el usuario
haga doble clic para activar el elemento; un solo clic cambia el color del
texto del elemento. La activación Standard requiere que el usuario
haga doble clic para activar un elemento, pero la apariencia del
elemento no cambia.
Empleando la BDD BDventas(Clientes, Fac_cabe, Fac_deta,artículos)
realizar el formulario:
Listbox1
LISTVIEW1
Configurando el ListView
Codificacion del Formulario
Imports System.data
Imports System.Data.SqlClient
Public Class Form1
Dim cn As New SqlConnection("Server=localhost;Integrated
Security=SSPI;database=ventas")
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
'Mostrar los empleados
Dim da As New SqlDataAdapter("Select cod_emp,nombre from empleado", cn)
Dim tbl As New DataTable
da.Fill(tbl) ListBox1.DataSource = tbl
ListBox1.DisplayMember = "nombre"
ListBox1.ValueMember = "cod_emp"
Call formatoListview1()
End Sub
Sub formatoListview1()
'dando formato al listview
With ListView1
.Items.Clear()
.View = View.Details
.Columns.Add("Factura", 80, HorizontalAlignment.Left)
.Columns.Add("Sub Total", 80, HorizontalAlignment.Left)
.Columns.Add("Igv", 80, HorizontalAlignment.Left)
.Columns.Add("Total", 80, HorizontalAlignment.Left)
.GridLines = True
.FullRowSelect = True
End With
End Sub
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal
e As
System.EventArgs) Handles ListBox1.SelectedIndexChanged
'Mostrar las 5 ordenes con mayor igv
Try 'controlador de errores
Dim codigo As String = ListBox1.SelectedValue
Dim cadsql As String = "Select top 5 Num_fact,sub_total,igv,total " & _
" from facturas Where cod_emp=@codigo"
Dim cmd As New SqlCommand(cadsql, cn)
cmd.CommandType = CommandType.Text cn.Open()
cmd.Parameters.Add("@codigo", SqlDbType.Char, 5).Value = codigo
Dim dr As SqlDataReader = cmd.ExecuteReader
If dr.HasRows = True Then
ListView1.Items.Clear()
Dim LstItem As ListViewItem
While dr.Read
LstItem = ListView1.Items.Add(dr(0).ToString)
LstItem.SubItems.Add(dr(1).ToString)
LstItem.SubItems.Add(dr(2).ToString)
LstItem.SubItems.Add(dr(3).ToString)
End While
End If
lblcantreg.Text = ListView1.Items.Count
Catch ex As Exception
Finally cn.Close()
End Try
End Sub
Private Sub ListView1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ListView1.Click
'Mostrando los datos de la columna
With ListView1
Dim factura As String = .Items.Item(.SelectedIndices(0)).Text
Dim subtotal As String = .Items.Item(.SelectedIndices(0)).SubItems(1).Text
MessageBox.Show(factura & " - " & subtotal)
End With
End Sub
End Class
Las Tablas de la base de datos Ventas
CREATE TABLE Empleado(
cod_emp char(5) Not NULL ,
nombre varchar(25) Not NULL ,
cargo varchar(20) NULL ,
CREATE TABLE Facturas (
num_fact char(6) Not Null,
cod_emp char(5),
cod_cli char(5),
sub_total decimal(8,2),
igv decimal(8,2),
total decimal(8,2),
fecha datetime,
)
Llenar datos consistentes
AddHandler (Instrucción)
Asocia un evento a un controlador de eventos en tiempo de ejecución.
AddHandler event, AddressOf eventhandler
Partes
event Nombre del evento que se va a controlar.
Eventhandler Nombre del procedimiento que controlará el evento.
Comentarios
Las instrucciones AddHandler y RemoveHandler permiten iniciar y detener el
controlador del evento en cualquier momento de la ejecución del programa.
La firma del procedimiento eventhandler debe coincidir con la firma del evento event.
La palabra clave Handles y la instrucción AddHandler permiten especificar que
ciertos procedimientos controlen eventos determinados, pero hay diferencias entre
ambos. La instrucción AddHandler conecta los procedimientos a los eventos en
tiempo de ejecución. Utilice la palabra clave Handles al definir un
procedimiento para especificar que controla un evento determinado. Para obtener
más información, vea Handles.
En los eventos personalizados, la instrucción AddHandler invoca al descriptor de
acceso AddHandler del evento. Para obtener más información sobre eventos
personalizados, vea Event (Instrucción).
Ejemplo
Sub TestEvents()
Dim Obj As New Class1
' Associate an event handler with an event. AddHandler Obj.Ev_Event, AddressOf
EventHandler
' Call the method to raise the event. Obj.CauseSomeEvent()
' Stop handling events.
RemoveHandler Obj.Ev_Event, AddressOf EventHandler
' This event will not be handled. Obj.CauseSomeEvent()
End Sub
Sub EventHandler()
' Handle the event. MsgBox("EventHandler caught event.")
End Sub
Public Class Class1
' Declare an event. Public Event Ev_Event() Sub CauseSomeEvent()
' Raise an event. RaiseEvent Ev_Event()
End Sub
End Class
RemoveHandler (Instrucción)
Quita la asociación entre un evento y un controlador de eventos.
RemoveHandler event, AddressOf eventhandler
Partes
event
Nombre del evento que se va a controlar.
eventhandler
Nombre del procedimiento que controla actualmente el evento.
Comentarios
Las instrucciones AddHandler y RemoveHandler permiten iniciar y detener el
control del evento de un evento específico en cualquier momento de la ejecución
del programa.
Para los eventos personalizados, la instrucción RemoveHandler llama al
descriptor de acceso RemoveHandler del evento. Para obtener más información
sobre eventos personalizados, vea Event (Instrucción).
Ejemplo
Sub TestEvents()
Dim Obj As New Class1
' Associate an event handler with an event. AddHandler Obj.Ev_Event, AddressOf
EventHandler
' Call the method to raise the event. Obj.CauseSomeEvent()
' Stop handling events.
RemoveHandler Obj.Ev_Event, AddressOf EventHandler
' This event will not be handled. Obj.CauseSomeEvent()
End Sub
Sub EventHandler()
' Handle the event. MsgBox("EventHandler caught event.")
End Sub
Public Class Class1
' Declare an event. Public Event Ev_Event() Sub CauseSomeEvent()
' Raise an event. RaiseEvent Ev_Event()
End Sub
End Class
Veamos un ejemplo con el llenado de datos en un ComboBox, mediante el
evento form1_load, y llamando a la vez al evento SelectedIndexChanged del
ComboBox.
Al momento de llenar el ComboBox1 en el evento Form1_Load,
usted evitara llamar al evento SelectedIndexChanged con la finalidad
de mostrar datos erróneos, debido a que se esta asignando objetos y
campos en sus propiedades.
Imports System.Data
Imports System.Data.Sqlclient
Public Class Form1
Dim cn As New SqlConnection("Server=localhost;Integrated
Security=SSPI;database=NorthWind")
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles
MyBase.Load
MostrarOrdenes()
End Sub
Sub MostrarOrdenes()
RemoveHandler ComboBox1.SelectedIndexChanged, _ AddressOf
ComboBox1_SelectedIndexChanged
Dim da As New SqlDataAdapter("Select CustomerID,CompanyName From
Customers", cn) Dim tbl As New DataTable
da.Fill(tbl)
ComboBox1.DataSource = tbl ComboBox1.DisplayMember = "CompanyName"
ComboBox1.ValueMember = "CustomerID"
AddHandler ComboBox1.SelectedIndexChanged, _
AddressOf ComboBox1_SelectedIndexChanged
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object,
ByVal e As
System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Dim da As New SqlDataAdapter("Select OrderID From Orders Where
CustomerID='" & ComboBox1.SelectedValue
& "'", cn)
Dim tbl As New DataTable da.Fill(tbl) ListBox1.DataSource = tbl
ListBox1.DisplayMember = "OrderID"
End Sub
End Class