En esta oportunidad quiero mostrar en visual basic .net una forma de modificar los datos que mostramos en un ListView, para ello utilizaremos dos formularios. Uno con un listview y otro con un textBox para cada dato (columna) que quisieramos modificar. Los dos formulario deberían verse como en la siguiente figura:

En el primer formulario (Form1) agregarmos un control listview y luego le agregamos 5 columnas: Código, Producto, Costo, Lista y Stock. Luego agregaremos el código del evento load del formulario y el evento DoubleClick del listview1 tal cual se muestra a continuación:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Seteo un par de propiedades del listview
ListView1.FullRowSelect = True
ListView1.MultiSelect = False
ListView1.HideSelection = False
'Cargo algunos datos de ejemplo
For i As Integer = 10 To 30
Dim item As New ListViewItem("A" & i.ToString & "Cod")
item.SubItems.Add("Producto " & i.ToString)
item.SubItems.Add(120 * i)
item.SubItems.Add(140 * i)
item.SubItems.Add(2 * i)
ListView1.Items.Add(item)
Next
End Sub
Private Sub ListView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.DoubleClick
If ListView1.SelectedItems.Count > 0 Then 'Si hay algún item seleccionado
Dim vForm2 As New Form2
vForm2.txtCodigo.Text = ListView1.FocusedItem.Text
vForm2.txtProducto.Text = ListView1.FocusedItem.SubItems(1).Text
vForm2.txtCosto.Text = ListView1.FocusedItem.SubItems(2).Text
vForm2.txtLista.Text = ListView1.FocusedItem.SubItems(3).Text
vForm2.txtStock.Text = ListView1.FocusedItem.SubItems(4).Text
vForm2.ShowDialog()
End If
End Sub
En el segundo formulario (Form2) agregaremos el siguiente código en el evento click del botón
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
My.Forms.Form1.ListView1.FocusedItem.Text = txtCodigo.Text
My.Forms.Form1.ListView1.FocusedItem.SubItems(1).Text = txtProducto.Text
My.Forms.Form1.ListView1.FocusedItem.SubItems(2).Text = txtCosto.Text
My.Forms.Form1.ListView1.FocusedItem.SubItems(3).Text = txtLista.Text
My.Forms.Form1.ListView1.FocusedItem.SubItems(4).Text = txtStock.Text
Me.Close()
End Sub
Listo! realmente no es nada complicado. Espero que el ejemplo sea lo suficientemente claro, sino, dejame un comentario y te ayudo con lo que no se entienda.
Información Bitacoras.com…
Si lo deseas, puedes hacer click para valorar este post en Bitacoras.com. Gracias….
Thank you!
Hola, bueno soy nuevo en esto, hasta el momento todo el codigo de hacer doble click en la celda y que aparesca en el 2° form todo bien exelente, pero el codido para el boton guardar no me sirve tira un error …
me apunta error en el TexCodigo.TXT, que en mi caso es TEXTBOX1.TXT y me dice lo siguiente: Referencia a objeto no establecida como instancia de un objeto (no se encontro NullReferenceExeption).
y las sugerencias son:
utilice palabra clave New ….
determinar si el objeto es Null …
espero que me ayuden gracias por todo adios …
Me sale el mismo error que Miguel.
help me
Eliseo, que pasa !!! espero tu respuesta, ya que en las otras web no hay ni siquiera del tema …
porfa trata de responderme ……..
Miguel:
perdón por la demora, pero el tiempo ha sido cruel conmigo por estos días…
Esta tarde me tome el trabajo de realizar, desde cero, el ejemplo tal cual esta en este post y te digo que todo funciona bien. Es mas… esta noche lo volví a hacer para estar seguro y ningún problema.
Te copio a continuación el procedimiento paso a paso:
1.- creo un nuevo proyecto con un formulario (Form1)
2.- agrego un control listview (listview1)
3.- agrego las 5 columnas al listview
4.- agrego un segundo formulario (Form2)
5.- agrego 5 textBox y los llamo txtCodigo, txtProducto, txtCosto, txtLista, txtStock
6.- agrego un botón al Form2
7.- copio y pego el codigo en el Form1
8.- copio y pego el codigo en el Form2
9.- ejecuto el programa
10.- festejo
Te doy otro consejo… cuando algo no me funciona muchas veces la mejor solución es dejar de dar vueltas con el formulario que no funciona y hacerlo de desde cero en uno nuevo.
Eliseo, Gracias
Ahora me Resulto todo bien ….
lo que pasa es que yo estaba mal, el problema era que mi lista se cargaba de la base de datos y la embarre y por eso no me funcionaba … pero lo hice como sale ahi y me funciona
Perfectoooo
GRACIASSSSSSSSSSSSSS
Наткнулся случайно на Ваш блог. Теперь стану постоянно просматривать. Надеюсь, не разочаруете и дальше
Hola!!!
Estoy haciendo un programa pero me resulto un problema, resulta que tengo un datagrid que ya hace todo bien, muestra datos, inserta, etc, lo que quiero ahora es, que yo al momento de seleccionar cualquier registro del datagrid me aparesca los datos en cada uno de los textbox mismo que utilizo para insertar, espero y me explique y e puedas ayudar, la verdad le esplicaste muy bien con el ejemplo anterior!!!!!
Es probable que estes cargando los datos directamente en el datagridview así: datagridview1.datasource= datos…
Si en lugar de eso usas un BindingSource y cargas los datos en el así: ejemplo1BindingSource.Datadource = datos…
podrás asignarle ese origen de datos al datagridview1 y a los textbox del formulario. Entonces, al cambiar de registro en el datagridview, este cambiará en registro seleccionado del bindingSource y este cambiará los datos en los textos en forma automática… espero haber sido claro… la verdad que este tema merece un post aparte.
Suerte.
Где аргументы?
Eh tio muy practico el ejercicio..
Aunque es un tanto poco vistoso..
Habra alguna forma de hacerlo directamente en el listview? ya que en su antepasado vb6 se podia y deberia de .. en vb .net cierto?
Bueno si sabes algo al respecto lo comentas que consultar nuevas opiniones no esta de mas!
Saludos!
Hola Eliseo, Soy de Costa Rica, Tengo un grave problema, estoy haciendo un proyecto que tiene mucho que ver con lo que estas poniendo, pero el problemas es que el listview lo tengo que cargar con una base de datos, podrias ayudarme con esto por favor.
NECESITO DE TU AYUDA ya que no encuentro en ningun lado nada. por favor.
Agradesco cualquier ayuda.
te recomiendo estos dos articulos para entender un poco como se hace…
http://www.solovb.net/index.php/2009/02/10/varias-formas-de-cargar-un-listview/
http://www.solovb.net/index.php/2009/02/03/conectarse-con-base-sql-server-y-llenar-datagridview/
Y si açun tienes problemas… avisame.
Suerte
Hola tengo el mismo problema que daniel, el listiew lo cargo desde una base de datos access 2003 y sin problemas doy altas y bajas en la bbdd pero a la hora de modificarlos me da el error:”35600″
Disculpame men la onda esta en que estoy haciendo un programa de un estacionamiento en visual basic .net 2008 se trata de generar un folio,hora de entrada y horas pagadas por adelantado de cada auto el detalle esta en que quiero meter esos 3 datos en un listview para poder realizar las operaciones necesarias en otro formulario ya tengo todo lo unico la onda se trata de hacer todo mientras el programa se ejecute no quiero manejar base de datos ,me podrias ayudar te lo agradeceria yo podria proporcionar informacion sobre java…
En primer lugar te recomiendo guardar los datos, ya sea en una base de datos o por lo menos en un archivo aunquesea un archivo de texto. Que pasa si por algún motivo se reinicia la PC o el programa tira un erro y hay que cerrar y volverlo a abrir… perderías toda la información, no sabrías cuantos autos tienes estacionados, ni sabrías cuantas horas pago por adelantado, etc, etc.
Te propongo que replantees el sistema pensando en estas posibilidades y cuando te surgan dudas me preguntes.
Ok tienes razon ademas seria mucho mas sencillo con una BD, lo que pasa es que esto solo es una practica de aula y el profesor como requisito puso que no se manejara BD , el programa solo debe funcionar mientras se ejecuta , no se decea guardar ningun historial…gracias.
el problema de arriva ya esta resuelto pero tengo un detalle con mi listview que tiene 3 columnas folio,hora de entrada y horas pagadas
Public Sub list()
Dim tabla As System.Windows.Forms.ListViewItem
tabla = ListView1.Items.Add(txtfolio.Text)
tabla.SubItems.Add(txthde.Text)
tabla.SubItems.Add(txthp.Text)
ListView1.View = View.Details
End Sub
bueno ya que tengo mi listview con 3 columnas y le agrego datos y todo y todo bien pero despues quiero saco el item que selecciono para guardar esos 3 datos del listview(el item y sus 2 subitems) pero hasta ahora solo he podido extraer el item a un textbox, el codigo es el siguiente
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim lviItem As ListViewItem
For Each lviItem In ListView1.SelectedItems
TextBox2.Text = CStr(lviItem.Text)
Next
End Sub
End Class
pero necesito saber como saco los subitems del item que ya extraje por ejemplo a textbox3.text y textbox4.text…
si me hechan una mano? . . . de todos modos seguire investigando.
gracias por todo ya lo pude hacer cheque sus codigos de arriva
aprendi bastante en este foro grax…
Eres un crack, revise en 1000 web y no lo habia podido resolver.
Saludos desde Panama
Muchas gracias esta estupendo el ejemplo, pero me gustaria saber si el procedimiento es parecido para un DatagridView en VB.NET. yo lo are, yo lo intentare hacer para un datagrid, haber que tal me sale. Una vez mas gracias yo necesitaba un ejemplo parecido a este.
Твой страничка прекрасный, всему офису интересно было читать
Да уж…
Gracias amigo, me fue muy util tu codigo.
hola una pregunta! como haria si de los 4 campos solo quisiera modificar precio y stock??? porque lo hago y me sale error: Referencia a objeto no establecida como instancia de un objeto, he intentado de todo pero no me sale. porfavor seria genial si me ayudaran!
ahh me olvidaba … cuando ejecuto la tabla sola form1 si me hace muy bien el listview pero cuando lo ejecuto con las demas ventanas del sistema ahi es donde me sale error!
hola:
sabes que toy sacando tu ejemplo para hacer algo en c sharp pero no lo entiendo.. lo mio es que de un listview seleccione una opcion y aparesca otro from y los datos en la los campos que tengo que mostra… ojala me puedas ayudar mi correo es jav.gonzalez@hotmail.es
de ante mano muchas gracias
BUENOS DIAS,TENGO UN LISTVIEW CON DATOS DE UNA SECCION DE ESTUDIANTES, Y QUISIERA SELECCIONAR MULTIPLES REGISTROS Y Q A ESOS REGISTRO SE LE ASIGNE UN VALOR…. EJEMPLO SELECCIONO 10 ESTUDIANTES DEL LISTVIEW Y LE AGREGO UN AÑO O SECCION A TODOS POR IGUAL
Tienes que habilitar la propiedad multiselect del listview para que te permita seleccionar varios items y luego debes recorrer mediante un for/next la coleccion selecteditems del listview y cambiar los datos que quieras.
Suerte
AMIGO ELISEO, LA PARTE DE MULTISELECCION, DEL LISTVIEW YA LA ACTIVE…SOY UN POCO NOVATO EN ESTE, PERO ME PODRIAS DAR SI ESTA TU DISPOSICION UN EJEMPLO DEL RECORRIDO Q ME DICES DE UN LISTVIEW ..ES DECIR QUIERO QUE SE RECORRA LOS DATOS Y MODIFICAR UNO EN ESPECIFICO
amigo eliseo, tendras codigo de como recorrer todo un listview???? es q necesito modificar multiples registros de una bd en sql server, y estoy out en eso.. gracias de ante mano
te tiro un ejemplo al vuelo… luego con mas tiempo pondré un ejemplo completo. Seria mas o menos asì:
for each item as listviewitem in listview1.items
item.text = “Aca pones lo que quieras”
next
Suerte
GRACIAS PERO EN BLANCO.. GRACIAS DE TODAS FORMAS, TENDRE Q ESPERAR EL EJEMPLO
como puedo realizar multiples modificaciones de los registros de una tabla en sql server, q estan reflejados en un listview..EJEMPLO TENGO REGISTROS DE VARIOS ESTUDIANTES Y UNO DE ESOS DATOS ES LA EDAD… QUISIERA SABER COMO ACTUALIZAR TODAS LAS EDADES DE UNA VEZ
Cuando se ejecuta el ejemplo tal cual esta, siendo Form1 el form principal del proyecto funciona!.
Pero con otros formularios en el proyecto, y llamando luego al Form1 desde un boton por ej., al momento de elegir un registro, modificarlo y darle “Grabar” sale el sgte. error en el Form2:
No se controló System.NullReferenceException
“Referencia a objeto no establecida como instancia de un objeto.”
linea: My.Forms.Form1.ListView1.FocusedItem.Text = txtCodigo.Text
Alguna ayuda?
Hola muy bueno tu foro, estoy haciendo unos listados en listview y tengo datos que en el formulario principal se ingresan mediante combobox, mi consulta es la siguiente como le hago para pasar un dato de sexo M o F de un listview a un combobox de otro formulario
Que tal buen feliz comienzo de año Eliseo
Tengo una consulta por ejemplo yo tengo 1 listview con solamente 4 columnas pero yo estoy jalando los registros de una base de datos mysql por ejemplo yo en mi textbox coloco el codigo y me lo imprime en el listview ahora aplico lo de tu ejemplo para poder modificarlo en otro form y bien si va el problema mio es que mi tabla tiene 8 campos y quiero modificarlos todos, no se si me entiendas o sea, muestro 4 en el litview por asi decirlo los campos de mayor importancia y al momento de darle doble clic que traiga todos los 8 campos en mi nuevo form, podrias ayudarme? gracias de antemano
puedes cargar las ocho columnas en el listview, pero hacer que solo se muestren 4, las columnas que no quieres mostrar las configuras con ancho 0 (cero). Es una opción sencilla. Suerte
Hola Eliseo,
muy bueno tu ejemplo, yo tengo algo parecido para una factura, lo he logrado hacer,
ahora quisiera guardar esto en la bd, pero no lo he conseguido,
hay algo en especial para programar el boton guardar??
este es el codigo que tengo??
Me.Validate()
Me.FacturaBindingSource.EndEdit()
Me.FacturaTableAdapter.Update(Me.AmwayDataSet.Factura)
Try
MsgBox(” Se ha guardado exitosamente la factura”)
Catch ex As Exception
MsgBox(“No se han podido Guardar los registros de la factura,vuelva a intentarlo”)
End Try
me podrias ayudar, gracias::::
email: cristinaespinosa2281@hotmail.com
hola :
una consulta a mi si me salio perfecto el for2 con el boton modifcar y todo esto lo que pasa es que resulta que yo estoy haciendo tambien columnas calculadas y solo tengo que modficar el nombre apellidos y sueldobasico del empleado segun a eso me calcula el descuento y neto, pero al momento de cambiar el sueldobasico en el listview me sigue calculando con el sueldobasico anterior. Mi pregunta es ¿Que puedo hacer?
suponiendo que tenes el calculo en una función, por ejemplo: calcular sueldo, deberás volver a llamarla después de cambiar el sueldo básico.
MIRA ESTE ES MI CODIGO DEL FORM2
Public Class Form3
Private Sub btnModificar_Click(ByValsender As System.Object, ByVal e As System.EventArgs) Handles
btnModificar.Click
Dim n, m, ñ, o, p As Double
Dim k As New Contratados
My.Forms.Form1.ListView2.FocusedItem.Text
= txtDni.Text
My.Forms.Form1.ListView2.FocusedItem.
SubItems(1).Text = txtApellidos.Text
My.Forms.Form1.ListView2.FocusedItem.
SubItems(2).Text = txtNombre.Text
My.Forms.Form1.ListView2.FocusedItem.
SubItems(3).Text = txTDireccion.Text
My.Forms.Form1.ListView2.FocusedItem.
SubItems(4).Text = txtHorasTrabajadas.Text
My.Forms.Form1.ListView2.FocusedItem.
SubItems(5).Text = txtHorasExtras.Text
n = k.calcularpagohorasnormales
m = k.calcularpagohorasextras
ñ = k.calcularsueldobruto2
o = k.calculardescuento2
p = k.calcularneto2
My.Forms.Form1.ListView2.FocusedItem.
SubItems(6).Text = n
My.Forms.Form1.ListView2.FocusedItem.
SubItems(7).Text = m
My.Forms.Form1.ListView2.FocusedItem.
SubItems(8).Text = ñ
My.Forms.Form1.ListView2.FocusedItem.
SubItems(9).Text = o
My.Forms.Form1.ListView2.FocusedItem.
SubItems(10).Text = p
Me.Close()
MsgBox(“Documento Modificado”, MsgBoxStyle.Information)
Me.txtDni.Focus()
End Sub
End Class
BUENO GRACIAS = YA SOLUCIONE EL ERROR SOLO ERA UN SIMPLE
DIM a,b as Double
a=Convert.ToDouble(book.HorasTrabajadas)
b=Convert.TODouble(book.HorasExtras)
n = k.calcularpagohorasnormales
m = k.calcularpagohorasextras
ñ = k.calcularsueldobruto2
o = k.calculardescuento2
p = k.calcularneto2
Gracias por el codigo esta muy bueno pude solucionar un problema con mi ListView Gracias