A cada desenvolupament que faig és gairebé inevitable haver d'utilitzar un listview. Per això ho considero un control molt útil. Al principi em cost una mica entendre el seu funcionament i vaig trigar diversos mesos a descobrir tot el seu potencial ... però des que vam aconseguir entendre'ns som inseparables.
Definició
Per definir d'una manera senzilla diré que un listview és una col · lecció d'objectes listviewitem s
Per poder poblar 1 listview s'ha de primer crear un objecte listviewitem (o diversos) i després s'annexa aquest objecte al listview utilitzant el mètode add de la propietat elements.
'Se suposa que tenim un formulari WinForm anomenat Form1 'Amb un control listview anomenat ListView1 Dim item As ListViewItem item = New ListViewItem ("Client 1") ListView1.Items.Add (item) 'També el podem omplir utilitzant un bucle for / next For i As Integer = 1 To 10 Dim item As ListViewItem item = New ListViewItem ("Client" & i) ListView1.Items.Add (item) Next
Un objecte listviewitem pot emmagatzemar diverses dades com ara NOM, COGNOM,
DOMICILI, etc.
Per a això cal afegir (add) a cada objecte listviewitem els subitems necessaris.
Dim item As ListViewItem item = New ListViewItem ("Nom 1") 'Ara a aquest objecte item li afegeixo un 'SubItem per a cada dada addicional item.SubItems.Add ("Cognom 1") item.SubItems.Add ("Domicili 1") item.SubItems.Add ("Telèfon 1") 'Només resta afegir l'objecte item a la 'Col · lecció d'objectes listviewitem s del 'Listview1 de la mateixa manera que ho hem fet abans ListView1.Items.Add (item)
Un listview compta amb diferents vistes per mostrar les dades, aquestes són Details,
LergeIcon, List, SmallIcon i Tile.
A continuació una descripció de cadascuna presa de l'ajuda de visual studio:
| Details | Cada element apareix en una línia independent amb informació més detallada sobre de cada element organitzada en columnes. La columna situada més a l'esquerra conté una petita icona i una etiqueta, i les columnes següents contenen els subelements especificats per l'aplicació. Les columnes inclouen una capçalera que pot mostrar un títol corresponent a la columna. L'usuari pot canviar la mida de cada columna en temps d'execució. |
| LargeIcon | Cada element apareix com una icona de mida normal sota del qual figura una etiqueta. |
| List | Cada element apareix com una icona petit a la dreta figura una etiqueta. Els elements estan organitzats en columnes sense encapçalat. |
| SmallIcon | Cada element apareix com una icona petit a la dreta figura una etiqueta. |
| Tile | Cada element apareix com a icona de mida normal amb l'etiqueta de l'element i informació del subelement situat a la seva dreta. L'aplicació especifica la informació del subelement que apareix. Aquesta vista només està disponible en Windows XP i en la família de Windows Server 2003. En sistemes operatius anteriors, aquest valor s'omet i el control ListView es mostra a la vista LargeIcon . |
Per poder veure les dades quan utilitzem la vista "Details" hem de primer crear
les columnes del listview d'acord a la quantitat d'ítems i subitems que tindrem.
Dim column1 As New System.Windows.Forms.ColumnHeader Dim column2 As New System.Windows.Forms.ColumnHeader Dim column3 As New System.Windows.Forms.ColumnHeader Dim column4 As New System.Windows.Forms.ColumnHeader column1.Text = «Nom» column2.Text = «Cognom» column3.Text = «Domicili» column4.Text = «Telèfon» column1.Width = 40 column2.Width = 30 column3.Width = 30 column4.Width = 20 'Sempre és important assegurar-se que no hi hagi 'Columnes i per això és millor esborrar-les abans de 'Afegir les noves columnes ListView1.Columns.Clear () 'Ara afegim les columnes noves ListView1.Columns.Add (column1) ListView1.Columns.Add (column2) ListView1.Columns.Add (column3) ListView1.Columns.Add (column4) ListView1.View = View.Details
La configuració de les columnes també es pot fer en mode disseny des de la
propietat columns, això no s obrirà un assistent des del qual s'administren les
columnes del listview.
Propietats
Hi ha una sèrie de propietats molt útils que no pots deixar de conèixer, a continuació
esmentaré les que jo més utilitzo. La resta de les propietats les deixo perquè
exercitis teu capacidtat de recerca.
| FullRowSelect | Aquesta propietat sempre la parametres 1 True i la seva funció és ressaltar tota la línia quan treball en vista Details. |
| Multiselect | Habilita (true) o desactiva (false) la selecció de múltiples elements dins del listview. |
| HideSelection | Si la propietat està en True no veuràs que element està seleccionat quan el control perd el focus. En alguns casos és important desactivar (false) aquesta opció per no perdre de vista l'ítem actiu. |
bon dia doctor:
en primer lloc espero no incomodar, voldria q em ajudés respecte a com omplir el listview, sempre utilitzeu el DataGridView .. i bo la veritat no c com omplir la meva listview doncs he provat q no és el mateix ... clar que vull omplir la meva listview amb els registre retornats d'una taula de SQLServer per mitjà d'una consulta per exemple "SELECT Id, Descripció FROM TablaPaises"
voldria saber també com afegir un registre q tinc en un TextBox al meu listview però sense afectar la meva base de dades, i quan de clic en el botó gravar de la meva finestra q estic treballant el registre q afegiu al meu listview s'agregui ara si a la meva base de dades ...
espere pugui ajudar .. i agraint-li per la seva ajuda .. i la seva aportació ...
atte. nen jesus rodriguez Quispe
Hola:
Gràcies per comentar i per descomptat que no m'incomoda la teva consulta.
Primer voldria recomanar-te que llegeixis i provis aquest article: http://www.solovb.net/index.php/2009/02/10/varias-formas-de-cargar-un-listview/ on l'últim codi carrega les dades des 01:00 datatable. També podries llegir tots els post sobre listview després cada un ha molts tips que et seran d'utilitat i t'ajudaran a comprendre millor aquest gran control, aqui et deixo el link: http://www.solovb.net/index.php/tag / listview / .
gràcies a la seva resposta doctor .. si vaig estar llegint l'article, i em va ajudar bastant .. li agradesco seu temps .. com sempre .. l'ésser ajudat en problemes com aquests i poder ajudar amb el que sabem .. fa que els coneixements creixin i molt mes trobar noves coses .. i dissenyar altres més ...
i gràcies doctor, problema solucionat
que tal, primer que tot, felicitacions pel teu blog, m'ha servit de molt. Voldria que responguessis una inquietud que tinc si no és molta molèstia, ja que tens un gran domini en el control listview, estic realitzant un reproductor en vbnet. el listview l'utilitzo per a tots els panells (reproducció, llistes de cançons, filtres ...), en el cas de cerca, càrrec en un listview totes les cançons que han estat agregades a la BD, en el form es troba un TextBox on s'introdueix la cançó a buscar i el botó de cerca, faig servir un FindItemWithText per la recerca .. i tot bé, en un msgbox, imprimeixo que la cançó es troba o no, perooo el favor que necessito de part teva, és que vull que faci un focus en l'ítem trobat al listview, no com agregar index als ítems, simplement ús: listview.items.add (CancionesEncontradas)
llavors, haver si pots ajudar-me si us plau, esperant una ràpida respuesta.gracias
Et recomiento que llegeixis el següent article i estic segur que trobaràs la forma de solucionar el teu problema: http://www.solovb.net/index.php/2009/05/19/mover-elementos-de-un-listview/
bonissim el post, senzill i interessant, ja solucioni el problemeta gràcies. et comenti en el post anterior sobre el proyectito que estic fent d'un reproductor, voldria que estiguéssim en contacte per a alguna petita consulta, si pots agregar als teus contactes seria bonissim, una? mes, a part del control de WMP que entre VB net hi ha una altra forma de reproduir mp3, per no dependre de la llibreria de WMP? esperant el teu ràpida resposta de nou, un gràcies per endavant
bon dia doctor.
novament recorrent a la seva ajuda, voldria saber quina és la diferència entre el datagridview i listview.
i quin dels dos controls em recomiend a utilitzar per a un maneig de més de 1000 registres per taula en una base de dades ..
li agradesco de davant mà.
i feliciandole de nou per les grans aportacions ...
et recomano llegir aquest post que crec et serà de gran ajuda:
http://social.msdn.microsoft.com/Forums/es-ES/dotnetes/thread/faea77af-edec-41a9-970f-cedb07542e73
saludoss:
E llegit q maneges MOLT EL listview
tinc una dudaa qe tingut durant gairebé tres dies q no he pogut resoldre és
¿Com calcules l'interval de dates que estan en una columna d'un listview?
---------------
Descripció:
programi un datetimepicker per q cada veus q es trie una data s'agregui en una columna del list view ..
La qüestió és q:
una veus agregades al listview no trobo la manera de poder obtenir l'interval de la primera data amb la segona, la segona amb la tercera i així successivament ...
talves se't presento un tema semblant com calcular dates q es van agregar en un listview ...
SI tens alguna recomanació o la resposta esperés teu consego xD
una cosa una mica més descriptiu del problema q tinc a la web :::
http://www.forosdelweb.com/f79/sumar-fechas-listview-711801/
GRACIASSSSSSSSSSSS .....
Hola:
el càlcul hauria de ser com qualsevol altre càlcul entre dates, independentment de si és o no un listview ...
Et recomano el següent article: http://www.solovb.net/index.php/2009/04/28/calculos-entre-fechas/
Sort
una pregunta sobre el teu post,
com fer per afegir 2 elements al meu listview amb la propietat view igual a largeicons i quiciera que cada ítems tingués una imatge diferent?
Cordial salutació,
per endavant agredezco teva col · laboració. el meu dubte és la següent: si jo tinc ja agredados diversos ítems a un listview. cap d'aquests està seleccionat (o sigui no li he donat click a sobre).
com faig per saber per codi que el listview no te cap item seleccionat?
alguna cosa com listview.listitems (i). select a vb 6.0
mil gràcies
doncs tenim un amic en comú
solament que en vb.net 2008 no li trobo totes les opcions (propietats) que m'eren útils per configurar ... tindrà la mateixa capacitat que el de vb 6??
Hola:
Et comento que el nou control ListView de visual basic. Net exposa la majoria de les propietats i mètodes que ja tenia en Visual Basic 6 i només hauràs de tenir en compte alguns noms que han canviat.
El control ListView exposa únicament algunes noves propietats. Aquest grup inclou Activació (especifica si els elements s'activaran amb un o dos clics), HeaderStyle (si es pot fer clics sobre els títols de la columnes) Scrollable (s'ha de definir com False per impedir el desplaçament), LargeImageList (el control Imagelist utilitzat per les imatges en mode icones grans) i smallImageList (el control Imagelist utilitzat en tots els altres maneres). Observa que la propietat view defineix la manera de visualització, com passava en Visual Basic 6, però la manera Report ha canviat de nom ara com a mode Details.
Espero haver aclarit una mica els teus dubtes.
Salutacions
Hola espere puguis respondre'mi ...
He programat un listview perquè em carge un llistat de clients directament des de la base de dades, el meu problema és que vull que se seleccioni el client del listview amb l'opció FullRowSelect i tornar a obtenir les dades des de la fila seleccionada, per així tornar a crear un objecte "client" a partir de les dades del listview, nose si entendràs així com ho explico, moltes gràcies per tot, gràcies pel teu temps.
Hola Eliseo, primer vull felicitar pel blog .. aquesta molt bo i em va servir bastant.
Ara et faig una consulta:
Tenint en compte el primer exemple
item = New ListViewItem ("Nom 1")
'Ara a aquest objecte item li afegeixo un
'SubItem per a cada dada addicional
item.SubItems.Add ("Cognom 1")
item.SubItems.Add ("Domicili 1")
item.SubItems.Add ("Telèfon 1")
'Només resta afegir l'objecte item a la
'Col · lecció d'objectes listviewitem s del
'Listview1 de la mateixa manera que ho hem fet abans
ListView1.Items.Add (item)
Com puc fer per passar els subitems a diferents TextBox???
Salutacions i gràcies
Ja ho solucioni, el tregui de la guia per modificar les dades del listview.
Salutacions
per referir-te als diferents subitems només has d'utilitzar un índex com et mostro a continuació:
textBox1.Text = item.subitems (0). text
textBox2.Text = item.subitems (1). text
textBox3.Text = item.subitems (2). text
Sort
necessito que m'ajudin amb un interrogant que tinc fa molt de temps i ningú m'ho va poder resoldre. Càrrec una base de dades completa en un listview, el tema és que a mesura que vaig agregant dades aquests es carregar al final i arriba un moment que no es veuen com puc fer per mantenir el scroll bar al final per poder veure el darrer que vaig agregant.
Des de ja moltes gràcies
Martín, he escrit un post que explica com resoldre aquesta problemàtica. Espero que et serveixi.
http://www.solovb.net/index.php/2009/10/15/listview-item-siempre-visible/
Amic tinc un problema. En reiniciar el meu sistema operatiu o formatar el meu equip en el meu sistema no puc veure els listview des del codi de programació. Estic usant Visual Net 2003.
Per donar una mica més d'informació el programa primer va ser creat en VB4 migrat a VB6 i ara treballant en Visual Net 2003. Que em cal instal · lar per poder veure els listview en el codi font .. -
olahe buscat molt sobre listview i m'agradaria que m'ajudessin amb la part de passar a un següent ítem en un listview
com amb una funcio listview.nextitem per codi com paara fer dos botons 1 de següent i un altre de previous
agraeixo la seva ajuda
Hola al VB.60 Hi havia la possibilitat de posar un key i això era ocult. El que passa és que he de omplir un listview amb numerats de l'1 al 10, però les ID de cada client ha d'estar ocult. així en obrir un listview. Puro carregar les dades enuna finestra a partir dela ID que estaria amagat. AH. i també es podia posar icones a cada fila ..
Hola:
Molt bo el teu blog, a més té molta estètica ... això és rar en els programadors ;)
Ara, la meva pregunta és la següent:
Tens algun exemple on s'ompli un listview a partir d'una Hashtable que conté diverses instàncies d'una classe específica? Es que he de utilitzar un foreach, però quan s'executa, el listview queda "en blanc". No sé si em expressi bé.
Moltes gràcies per la teva resposta.
Hola:
Sobre meu problema vull aclareix que he descobert com fer-ho, només que ho he de fer fora del tabcontrol on es trobava el listview, perquè estava dins d'un tabcontrol i no funcionava ¿que serà?
Moltes gràcies per qualsevol resposta.
hola
espere algú pugui ajudar-me.
el meu problema amb list view és que li comandament informació per mitjà de codi ja que jo genero les claus i les dades dels meus productes amb una mica d'informació que em proporciona l'usuari i després les dades que estiguin en el listview els comandament a una base de dades, fins aqui tot el tinc bé però en ocasions per desar l'usuari necessita modificar dades que estan en els subitems i el que no puc fer és PODER MODIFICAR LES DADES DELS SUBITEMS algú pot ajudar perquè ja em desesperi i no trobo la solució de davant mà gràcies
Hola,
Una consulta, com puc saber quan s'activa el scrool horitzontal d'un listview en vb net.
Salutacions
Juan carlos
Hola,
voldria saber com càrrec imatges en un listview, és a dir, col · loco en columnes dades portats des d'una base mitjançant dataset però vull que quan aparezce la dada per exemple el nom al seu costat aparegui la imatge d'aquesta persona.
Agrairé molt la seva ajuda
Per aconseguir això que queres hauries de fer servir un DataGridView. Sort.
Voldria saber com càrrec un Listview, amb una taula Access, algun exemple senzillet, perquè no hi ha manera d'aconseguir.
Gràcies
onada doctor vull fer-te una consulta
com puc treure un or ejmplo arots ítem d'un listwiev i després q l'ítem subtotal es resti amb el total q és un label q allotja el totañ de les vendes si tieens aquesta resposta seria de molta ajuda moltes gràcies
m'explico millor jkajkajk bo
el que em passa és que no puc restar l'ítem subtotal del meu listwiev en el label que es diu total_venta m'explico millor.
al listwiev no puc treure el producte
iq em resti el producte en aquest label
per endavant moltes gràcies