Newsgroup: it.comp.lang.visual-basic
Titolo: listview e findItem

Salve a tutti,
ho un listview popolato con diversi elementi in formato report. Ogni item ha
key nella forma n;0;m oppure n;m;0 (p.e.: 777;0;1).
nel seguente codice
key = "777;0;1"
set itemX = lst.findItem(key)
if not (itemX is nothing) then
    msmgbox "Trovato"
endif
l'if fallisce sempre anche se per esempio key = lst.selecteditem.key
Se ho ben capito (e a questo punto ne dubito), il codice lst.findItem(key)
(dove nella findItem non specifico altro se non la stringa obbligatoria),
dovrebbe restituire un oggetto listItem la cui chiave è key, oppure Nothing
(nel caso in cui quell'Item con quella chiave non esista nel listview).
Dov'è che sbaglio?
Grazie anticipatamente a tutti coloro che vorranno rispondere.
Saluti,
Nicola.
-- 
Posted from  [194.243.32.30] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Dov'è che sbaglio?
Se guardi bene sulla guida del metodo FindItem vedrai che le possibili
ricerche vengono fatte solo nei valori Text, Subitems o Tag ma non nella Key
(che serve solo per stabilire da dove iniziare la ricerca).
Per verificare se esiste un ListItem data una chiave non esiste un metodo
nativo, ma devi intercettare l'errore, il tuo codice quindi diventa:
key = "777;0;1"
On Error Resume Next
set itemX = lst.ListItems(key)
On Error Goto 0
if not (itemX is nothing) then
    msgbox "Trovato"
end if
non e' elegantissimo ma e' il sistema piu' economico...
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

Scusa la domanda un po' ingenua. Il codice seguente lo uso per fare il refresh
di un'altra listview i cui item possono essere cancellati.
Questo codice funziona. Mi viene da chiedermi perché
Private Sub cmdRefresh_Click()
Dim sqlString As String
Dim v
Dim rs As Recordset
Dim itmX As ListItem
    If Len(lstMov.SelectedItem.key) <= 0 Then Exit Sub
    v = Split(lstMov.SelectedItem.key, ";")
 
    If UBound(v) >= 1 Then
        sqlString = "SELECT * FROM TABELLA WHERE ID=" & v(1)
        Set rs = db.OpenRecordset(sqlString)
        If rs.EOF Then  'se non esiste lo elimino dal listview
            Set itmX = lstMov.FindItem(lstMov.SelectedItem.key)
            If itmX Is Nothing Then lstMov.ListItems.Remove
(lstMov.SelectedItem.Index)
        End If
    End If
 
    cmdRefresh.Enabled = False
End Sub
Nota che in questo caso le key degli item sono nella forma "m;n"
Mi ridomando (dopo averlo appena riprovato): perché funziona?
"Luca Dormio" <lucaFaV...@tinFaVa.it> wrote in message
news:9t0krb$n1o$1...@fe2.cs.interbusiness.it...

-- 
Posted from  [194.243.32.15] 



[SNIP]
sqlString = "SELECT * FROM TABELLA WHERE ID=" & v(1)
Set rs = db.OpenRecordset(sqlString)
If rs.EOF Then  'se non esiste lo elimino dal listview
    Set itmX = lstMov.FindItem(lstMov.SelectedItem.key)
    If itmX Is Nothing Then lstMov.ListItems.Remove
(lstMov.SelectedItem.Index)
End If
[SNIP]
Perche' probabilmente volevi fare "If Not itmX Is Nothing Then ..."
invece cosi' come hai scritto, FindItem restituisce sempre Nothing (come e'
naturale che sia, stai cercando il testo della Key nella property Text) e
quindi l'elemento verra' sempre cancellato...
Piu' in generale comunque, anche se FindItem funzionasse con la chiave come
serve a te, il controllo che fai dopo "If rs.EOF Then" e' del tutto
superfluo:
stai cercando di sapere se un elemento con la chiave del SelectedItem esiste
nell'insieme dei ListItems per poterlo cancellare, ma questa e' una
contradizione in termini perche' quell'elemento potra' essere solo il
SelectedItem stesso, che per definizione esiste *sempre* nell'insieme dei
ListItems e quindi, dopo il tuo controllo su DB, puoi cancellarlo per indice
o per chiave senza ulteriori controlli...
Non so se mi sono spiegato bene, fatto sta che il codice puo' essere ridotto
a
sqlString = "SELECT * FROM TABELLA WHERE ID=" & v(1)
Set rs = db.OpenRecordset(sqlString)
If rs.EOF Then  'se non esiste lo elimino dal listview
    lstMov.ListItems.Remove lstMov.SelectedItem.Index ' o .Key
End If
senza nessun problema.


 Dr. Emmett L. Brown
-- 
Posted from  [212.171.192.62] 
