Colorare righe della listview

mercoledì 10 novembre 2010 - 14.46
Tag Elenco Tags  VB.NET  |  .NET 3.5  |  Windows XP  |  Visual Studio 2008  |  Access (.mdb)  |  Crystal Reports 2008

Mau67 Profilo | Expert

Ciao al forum, ho un form con 2 listview,
Nella listview1 carico l'elenco degli amministrati
nella listview2 inserisco le variazioni mensili degli amministrati.

A questo punto io vorrei vedere visivamente se ho già fatto una variazione per qualche amministrato semplicemente evidenziando in rosso il nominativo che si trova nella listview1 quando questa è presente nella listview2.

Come posso fare?
Grazie in anticipo
e saluti dall'Afghanistan (sono un militare) ciao a tutti
Mau67

AntCiar Profilo | Expert

Ciao.

Allora per colorare un Item della listView, basta accedere all'item in questione tramite l'indice e dargli il colore

me.ListView1.Item(x).ForeColor = Color.Red

Poi per vedere se esiste o no nell'altra listview, io farei in questo modo:

- durante il caricamento della seconda listView, memorizzerei un IDunivoco della persona (va bene anche il nominativo come dicevi tu) in una List di stringhe.

Private ElencoNomi as Generic.List(Of String) = new Generic.List(Of String)() 'da dichiarare a livello globale nella tua form

- poi quando aggiungi gli Item alla ListView2, aggiungi il nominativo anche nell'oggetto precedente:

ElencoNomi.Add(xxxxx.Toupper().Trim()) ''fai il toupper.trim() in modo da poter effettuare una ricerca non case-sensitive

Poi ti scorri gli item della listview1 e controlli uno ad uno se esistono nella 2:

Dim i as integer
For i = 0 to me.ListView1.Items.Count-1

if ElencoNomi.Contains(me.listview1.items(i).subitems(X).text.Toupper().trim()) then ''(Al posto di X devi mettere l'indice a base 0 di colonna della listview dove c'è il nominativo)

me.listview1.items(i).forecolor = Color.Red
else
me.listview1.items(i).forecolor = Color.Black
end if

next


Ciao ciao e un saluto a tutti i connazionali in missione.



Cristian Barca

Mau67 Profilo | Expert

Scusa ma non ho capito molto
io popolo contemporaneamente i due listview filtrandoli, quindi all'atto del caricamento la listview1 si deve colorare se nella listview2 e presente l'id corrispondente al nome.

non sono molto pratico potresti dirmi il codice dove scriverlo?

Scusami ma da autodidatta ho qualche difficoltà

Grazie e tanti saluti dal contingente italiano in afghanistan
Mau67

AntCiar Profilo | Expert

Ciao.

Se puoi posta il codice che usi per popolare le due Listview così ti inserisco quello che serve.
Cristian Barca

Mau67 Profilo | Expert

ti allego un file txt con il codice

Grazie infinitamente
Mau67

AntCiar Profilo | Expert

Ciao.

Ti ho rsposto con il tuo stesso file modificato. All'interno del file cerca @@@ (3 chiocciole) così localizzi le parti che ho aggiunto. Ogni blocco che ho aggiunto inizia e finisce con le 3 chiocciole.

Ti spiego cosa faccio per fare quello che serve a te.

Durante il caricamento della listview2, aggiungo in una Lista di stringhe i valori che dovrò controllare.
Poi durante il caricamento della ListView1 controllo se l'elemento che sto aggiungendo è presente nella Lista di Stringhe. Se presente, imposto il colore rosso altrimenti il nero.

Per una questione di ottimizzazione, ti consiglio di caricare prima la ListView2 e poi la ListView1.
Se poi non è possibile invertire le chiamate devi per forza fare questo:

Carica ListView1
carica ListView2
Carica ListView1

questo perchè la Lista di stringhe si popola con il riempimento della ListView2 e quindi se fai prima il caricamento della Listview1 non troverà mai duplicati perchè la Lista di Stringhe è vuota.

Ciao ciao


Cristian Barca

Mau67 Profilo | Expert

Mi da 1 errore

Private Elenco As Generic.List(Of String) = New Generic.List(Of String)

mi dice che :
Elenco esiste già come Private elenco As System.Collections.Generic.Generic.List(Of String)


Mau67

AntCiar Profilo | Expert

Ciao.

Scusami. Ho dichiarato una variabile con lo stesso nome di una Sub e questo al compilatore non piace tanto.

la riga in questione è questa:

private Elenco as Generic.List(of string) = new Generic.List(of string)

al posto di "Elenco" mettici "ListaOccorrenze" oppure un nome più consono (come vuoi tu). alla fine dovresti ottenere una cosa del genere:

private ListaOccorrenze as Generic.List(of string) = new Generic.List(of string)

Poi in tutti i blocchi di codice che ti ho aggiunto io nel messaggio precedente, dove uso Elenco. sostituiscilo con ListaOccorrenze. )o con il nome chi scegli tu). Così la cosa funziona.

ciao ciao
Cristian Barca

Mau67 Profilo | Expert

Grazie Cristian funziona perfettamante Un saluto dall'afghanistan e alla prossima

Ciao Ciao
Mau67

AntCiar Profilo | Expert

>Grazie Cristian funziona perfettamante Un saluto dall'afghanistan
>e alla prossima
>
>Ciao Ciao
>Mau67

Un saluto anche a te e a tutta la truppa. Ti ricordo di chiudere il thread così non lasciamo discussioni aperte quando effettivamente il problema è stato risolto.


Cristian Barca
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5