Siempre que se agregan nuevos elementos ListviewItems a un control listview, y estos son tantos que el control no tiene espacio suficiente para mostrarlos en pantalla, se agrega una barra de desplazamiento vertical. Esto está perfecto, solo que por default no se ven los nuevos items que se van agregando.
Hoy quiero mostrarles como solucionar este pequeño inconveniente.
Los controles de visual basic .net cono el listview nos brindan una cantidad impresionante de propiedades para su configuración, tantas que muchas veces se desconocen.
Quiero mostrarlo con un ejemplo muy sencillo. Para ello necesitaremos un formulario, un control listview y un botón.
Las propiedades que mas nos interesan son las siguientes:
Bueno, ahora si el código:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ListView1.HideSelection = False
ListView1.FullRowSelect = True
ListView1.MultiSelect = False
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Static i As Integer = 0
i += 1
ListView1.Items.Add(New ListViewItem("Item número " & i))
ListView1.Items(ListView1.Items.Count - 1).Selected = True
ListView1.Items(ListView1.Items.Count - 1).Focused = True
ListView1.FocusedItem.EnsureVisible()
End Sub
Al ejecutarlo debería verse muy parecido a lo que se muestra en esta imagen:
Eso es todo, si te sirvió esta información, por favor, deja un comentario.
Información Bitacoras.com…
Valora en Bitacoras.com: Siempre que se agregan nuevos elementos ListviewItems a un control listview, y estos son tantos que el control no tiene espacio suficiente para mostrarlos en pantalla, se agrega una barra de desplazamiento vertical. Esto está…..
Bueno todos sabemos q se muestren los datos pero a mi me interesaria q si pueden explicar como se guarden en un modulo aunq se sierre el programa
UNA PREGUNTA ESE MISMO EJEMPLO QUIERO PERO PARA UN DATAGRIDVIEW NO SE SI SE PODRIAS AYUDARME EN ESE PROBLEMA
MI CORREO:
richardramos789@hotmail.com
TE ESTARIA AGRADECIDO SI ME AYUDARAS
Hola que tal,
Mira yo tengo una duda con un listview que implemento en mi sistema, estoy armando un sistema punto de venta y al introducir un codigo en mi txtbox logro imprimirlo en mi listview correctamente, mi duda es que quiero que al momento de registrar el mismo producto, en lugar que se añade una nueva fila se añada a la misma y en la columna Cantidad vaya aumentando el numero.
Por ejemplo si añado 12345, queda impreso en mi listview, pero si vuelvo añadir 12345 en lugar que se imprima en una nueva fila, se imprima en la 1 fila pero que en la columna aumenta a cantidad 2, no se si me explique o si me pudiera guiar en esta duda que tengo se lo agradeceria mucho.
no me queda muy claro que es lo que quieres hacer, pero te sugiero que mires este ejemplo que te puede ser de utilidad: http://www.solovb.net/index.php/2009/02/19/modificar-datos-de-un-listview/
Cualquier otra duda no dejes de consultarme.
Saludos
Hola Jorge, lo que pides involucra persistencia de datos y que se actualice una columna perteneciente a la fila de una llave específica en una tabla; para ello puedes optar por 2 soluciones: la primera que crees una BD con los campos que necesitas y utilices una conexión ya sea con MySQL usando el adaptador para ello o el SQL Server incluido en Visual Studio, la otra forma es por medio de archivos planos que guarden los datos correspondientes en un fichero .txt y luego se proceda a la lectura y reescritura de algunos datos; para ambas opciones como necesitas incrementar el valor para una columna rewquerida, debes también aplicar una función que incremente este valor basado en la condición que requieres.
Muchas gracias Eliseo por tu pronta respuesta.
Ok mira te explico. Tengo un TextBox en el cual añado los productos que tengo en mi DB, ok por ejemplo, Coca-cola, introduzco el codigo de barras en mi TextBox en este caso seria 12345678, bueno se muestra en mi listview el producto con su descripcion mis columnas del listview son:
Codigo Producto, Descripcion, Cantidad, Precio Venta, Existencia.
Entonces al añadirse el producto queda mi fila llena de esos datos en mi listview, pero si yo vuelvo a insertar el codigo de la coca-cola, se muestra en una siguiente fila, lo que me gustaria hacer, es que al momento de insertar otra vez el mismo producto en lugar de mostrarse en una nueva fila, solo cambie el numero de mi columna Cantidad, en este caso cambiaria a 2.
Eso es mas que nda lo que quiero hacer, si me pudieras decir mas o menos como resolver esta duda te lo agradeceria.
Gracias
Bueno, ahora esta un poco mas claro.
Lo primero que tienes que hacer antes de insertar una nueva linea es recorrer el listview para verificar si ya se ha ingresado el código que estas intentando insertar.
Eso lo haces con un For Each, por ejemplo
‘Creo una variable para que me indique si encontro que el código ya existia
Dim existe as boolean = False
For each item as ListViewItem in listviewProductos.items
if item.text = txtCodigo.text Then
‘Si entra acá es porque ya estaba cargado
dim cantidadAnterior as Integer = CType(item.subitm(2).text, Integer)
item.subitem(2).text = cantidadAnterior + CType(txtCantidad.text, Integer)
‘Si lo encontró le aviso que ya existia
existe = True
end if
Next
If Not existe Then
‘Aca lo inserto pues no lo encontró
End if
Bueno, espro que te sirva… no descarto que pueda terner algún error de tipeo dado que lo escribí directamente acá
Pero seguro que te va a servir
Gracias nuevamente,
Mira te comento que si me ha dado resultado en cuestión a que si cambia el valor de la columna Cantidad, lo que pasa es que estoy extrayendo los valores de una base de datos de MySQL mira te muestro el codigo de como imprimo mi listview
Private Sub listview()
Dim i As Integer
Dim s As Integer
Dim contador As Integer
Dim Subtotal As Double
Dim listar As New ListViewItem
Dim cadena As New MySqlCommand(“SELECT * FROM productos WHERE CodigoProducto =’” & txtCodigoBarras.Text & “‘”, con)
mysqldr = cadena.ExecuteReader()
While mysqldr.Read()
listar = ListView1.Items.Add(txtCodigoBarras.Text.Trim)
listar.SubItems.Add(CStr(mysqldr(“Descripcion”)))
listar.SubItems.Add(CStr(mysqldr(“Cantidad”)))
listar.SubItems.Add(CStr(mysqldr(“PrecioVenta”)))
listar.SubItems.Add(CStr(mysqldr(“Stock”)))
End While
Dim existe As Boolean = False
For Each item As ListViewItem In ListView1.Items
If item.Text = txtCodigoBarras.Text Then
Dim cantidadAnterior As Integer = CType(listar.SubItems(2).Text, Integer)
listar.SubItems(2).Text = cantidadAnterior + CType(mysqldr(“Cantidad”), Integer)
existe = True
End If
Next
If Not existe Then
End If
lblCantidadProd.Text = mysqldr.Item(3)
lblPrecioUnidad.Text = mysqldr.Item(5)
For s = 0.0 To ListView1.Items.Count – 1
Subtotal = Subtotal + ListView1.Items(s).SubItems(3).Text
Next
lbLSubTotal.Text = “$” & Format(Subtotal, “0.00″)
For i = 0 To ListView1.Items.Count – 1
contador = contador + ListView1.Items(i).SubItems(2).Text
Next
Me.lblContador.Text = contador
mysqldr.Close()
End Sub
El codigo que me pasaste asi lo implemente y mira los resultados en la foto siguiente:
http://img193.imageshack.us/img193/4421/productosv.jpg
Amigo disculpa si te molesto haha con tanta pregunta, pero ya mas o menos estoy encontrando el problema, por ejemplo introduzco el producto
DORITOSNAC
Se introduce en la primera fila y cuando vuelvo a poner DORITOSNAC se imprime en la segunda fila pero el que ya habia introducido primero cambia su valor de cantidad a 2 y lo vuelvo a introducir se imprime otra vez en una 3 fila pero de igual manera el de la 1 fila cambia su valor a 3
If txtCodigoBarras.Text = txtCodigoBarras.Text Then
Dim existe As Boolean = False
For Each item As ListViewItem In ListView1.Items
If item.Text = txtCodigoBarras.Text Then
Dim cantidadAnterior As Integer = CType(item.SubItems(2).Text, Integer)
item.SubItems(2).Text = cantidadAnterior + CType(lblCantidadProd.Text, Integer)
existe = True
End If
Next
If Not existe Then
End If
A ver si lo consigo ahorita si no cualquier explicacion de tu parte te la agradeceria.
ya lo logre solucionar muchisimas gracias por tu apoyo pongo la solucion:
Dim conteo As Integer
For j As Integer = 0 To Me.ListView1.Items.Count – 1
If Me.ListView1.Items(j).SubItems(0).Text = txtCodigoBarras.Text Then
conteo = CInt(Me.ListView1.Items(j).SubItems(2).Text) + 1
Me.ListView1.Items(j).SubItems(2).Text = conteo
Exit Sub