Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    131

    VB.NET - Eliminazione multipla listview MySQL

    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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma la listview è collegata al db in qualche modo oppure no?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    131
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Ma la listview è collegata al db in qualche modo oppure no?

    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

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    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.



Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.