Salve.
Sapete come eliminare più item in una listview, con una selezione multipla?
Devo eliminare sia l'item locale della listview, sia il record del db.
Qualcuno sa come fare? grazie in anticipo
Salve.
Sapete come eliminare più item in una listview, con una selezione multipla?
Devo eliminare sia l'item locale della listview, sia il record del db.
Qualcuno sa come fare? grazie in anticipo
Ma la listview è collegata al db in qualche modo oppure no?
No MP tecnici (non rispondo nemmeno!), usa il forum.
Si, questo è il codice che uso per aggiungere le informazioni alla listview:
If (CONNECTION.State And ConnectionState.Open) = ConnectionState.Open Then
CONNECTION.Close()
End If
strSQL = "SELECT * from utenti"
CONNECTION.Open()
cmd = New MySqlCommand(strSQL, CONNECTION)
dr = cmd.ExecuteReader()
Do While dr.Read()
riga = riga + 1
Nome = (dr.Item("Nome").ToString())
Cognome = (dr.Item("Cognome").ToString())
Dim lv As ListViewItem = ListViewElencoUtenti.Items.Add(Nome)
lv.SubItems.Add(Cognome)
Loop
dr.Close()
cmd.Dispose()
CONNECTION.Close()
End If
Vorrei eliminare più utenti alla volta, per eliminare uso questo:
If Not CONNECTION Is Nothing Then
If (CONNECTION.State And ConnectionState.Open) = ConnectionState.Open Then
CONNECTION.Close()
End If
strSQL = "DELETE FROM utenti WHERE nome ='" & ListViewElencoUtenti.SelectedItems(0).Text & "'"
CONNECTION.Open()
cmd = New MySqlCommand(strSQL, CONNECTION)
dr = cmd.ExecuteReader()
dr.Close()
cmd.Dispose()
CONNECTION.Close()
End If
Invece per eliminare un item della listview e non dal database uso questo:
For Each i As ListViewItem In ListViewElencoUtenti.SelectedItems
ListViewElencoUtenti.Items.Remove(i)
Next
Occorre acquisire anche la PK del record e memorizzarla nella riga del listview, esempio nella proprietà TAG, oppre nella KEY.
Cosa che tu non fai, e questo può compromettere il risultato nel caso vi siano omonimi. E comunque si deve usare sempre e solo la PK. Ogni altro metodo è sbagliato perché troppo rischoso.
Così facendo, quando è ora di eliminare non fai altro che scorrere gli items con un ciclo (For i, oppure For Each) e di quelli selezionati leggi la PK e la accodi in una variabile locale (String), costruendo così una stringa da passare all'operatore IN.
Supponiamo che la PK sia il campo IDUtente di tipo numerico, e che l'utente abbia selezionato 3 utenti la cui PK è 25,26,37, il ciclo dovrà comporre una stringa di questo tipo:
codice:sIN = "25,26,37"
che passerai all'opratore IN nella DELETE:
codice:strSQL = "DELETE FROM utenti WHERE IDUtente IN (" & sIN & ")"
Una volta eliminati dal database, li elimini dal listview.
Il tutto, ovviamente, deve essere racchiuso all'interno di una transazione, altrimenti possono essere guai e trovarti ad esempio che i record non sono stati eliminati dal database, ma solo dal listview.
![]()
Ultima modifica di gibra; 25-09-2015 a 10:48