Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Eliminare duplicati in fase di caricamento nella listview
mercoledì 25 giugno 2014 - 16.04
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
.NET 4.0
|
Visual Studio 2010
|
MySQL 5.5
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
mer 25 giu 2014 - 16:04
Ciao al forum,
Ho la necessità di caricare dei dati in una ListView, il problema è che nella select alcuni dati in visualizzazione sono giustamente duplicati quando si caricano i dati da più tabelle, come faccio a non visualizzare i duplicati?
Questo è un esempio di codice che uso per visualizzare i dati nella listview
Dim Sql As String = "Select lavoratori_storico_mansioni.ID,azienda.Ragione_Sociale,azienda_unita_produttiva.Unita_Produttiva," & _
"mansione.mansione,Date_Format(lavoratori_storico_mansioni.Data_Inizio, '%d/%m/%Y') As Data_Inizio,Date_Format(lavoratori_storico_mansioni.Data_Fine, '%d/%m/%Y') As Data_Fine," & _
"lavoratori_storico_mansioni.Corrente,lavoratori_storico_mansioni.ID_Unita_Produttiva,lavoratori_storico_mansioni.ID_Mansione,lavoratori_storico_mansioni.ID_Partita_Iva" & _
" From lavoratori_storico_mansioni Inner Join azienda_unita_produttiva On azienda_unita_produttiva.ID = lavoratori_storico_mansioni.ID_Unita_Produttiva Inner Join" & _
" azienda On azienda.Partita_Iva = azienda_unita_produttiva.ID_Partita_Iva Inner Join mansione On mansione.ID = lavoratori_storico_mansioni.ID_Mansione" & _
" Where lavoratori_storico_mansioni.ID_Codice_Fiscale = '" & Selected.SubItems(3).Text & "' Order By lavoratori_storico_mansioni.Data_Inizio "
' Svuota la casella ListView1 e
' la casella di testo
ListView2.Items.Clear()
Dim thisCommand As New MySqlCommand(Sql, Connection)
' Set the view to show details.
ListView2.View = View.Details
' Allow the user to edit item text.
ListView2.LabelEdit = True
' Allow the user to rearrange columns.
ListView2.AllowColumnReorder = True
' Display check boxes.
ListView2.CheckBoxes = False
' Select the item and subitems when selection is made.
ListView2.FullRowSelect = True
' Display grid lines.
ListView2.GridLines = True
' Sort the items in the list in ascending order.
ListView2.Sorting = SortOrder.None
Try
Me.ListView2.Columns.Clear()
Connection.Open()
Dim thisReader As MySqlDataReader = thisCommand.ExecuteReader()
While (thisReader.Read())
Dim item As New ListViewItem(thisReader.Item(0).ToString, 0)
item.SubItems.Add(thisReader.Item(1).ToString)
item.SubItems.Add(thisReader.Item(2).ToString)
item.SubItems.Add(thisReader.Item(3).ToString)
item.SubItems.Add(thisReader.Item(4).ToString)
item.SubItems.Add(thisReader.Item(5).ToString)
item.SubItems.Add(thisReader.Item(6).ToString)
item.SubItems.Add(thisReader.Item(7).ToString)
item.SubItems.Add(thisReader.Item(8).ToString)
item.SubItems.Add(thisReader.Item(9).ToString)
ListView2.Items.AddRange(New ListViewItem() {item})
End While
ListView2.Columns.Add("ID", 0, HorizontalAlignment.Left)
ListView2.Columns.Add("Azienda", 250, HorizontalAlignment.Left)
ListView2.Columns.Add("Unità Produttiva", 250, HorizontalAlignment.Left)
ListView2.Columns.Add("Mansione", 200, HorizontalAlignment.Left)
ListView2.Columns.Add("Data Inizio", 100, HorizontalAlignment.Left)
ListView2.Columns.Add("Data Fine Rapp.", 100, HorizontalAlignment.Left)
ListView2.Columns.Add("Corrente", 100, HorizontalAlignment.Center)
ListView2.Columns.Add("ID Unità Produttiva", 0, HorizontalAlignment.Left)
ListView2.Columns.Add("ID Mansione", 0, HorizontalAlignment.Left)
ListView2.Columns.Add("ID P.IVA", 0, HorizontalAlignment.Left)
Catch ex As Exception
'MsgBox(ex.Message)
End Try
Connection.Close()
Grazie in anticipo
Mau67
luigidibiasi
Profilo
| Guru
1.077
messaggi | Data Invio:
mer 25 giu 2014 - 16:08
Quale è il campo che ti permette di capire se due item sono duplicati?
Ipotizzo sia questo:
>thisReader.Item(1).ToString
Puoi usare un arraylist per fare una cosa del genere:
Dim duplicati as arraylist = new arraylist
>Dim thisReader As MySqlDataReader = thisCommand.ExecuteReader()
>
> While (thisReader.Read())
' se è la prima volta che vedi questo elemento lo aggiungi
if NOT duplicati.contains(thisReader.Item(1).ToString) then
duplicati.add(thisReader.Item(1).ToString)
else
continue ' se già lo hai visto precedentemente lo salti
end if
>Dim item As New ListViewItem(thisReader.Item(0).ToString, 0)
>item.SubItems.Add(thisReader.Item(1).ToString)
>item.SubItems.Add(thisReader.Item(2).ToString)
>item.SubItems.Add(thisReader.Item(3).ToString)
>item.SubItems.Add(thisReader.Item(4).ToString)
>item.SubItems.Add(thisReader.Item(5).ToString)
>item.SubItems.Add(thisReader.Item(6).ToString)
>item.SubItems.Add(thisReader.Item(7).ToString)
>item.SubItems.Add(thisReader.Item(8).ToString)
>item.SubItems.Add(thisReader.Item(9).ToString)
>ListView2.Items.AddRange(New ListViewItem() {item})
> End While
Spero di aver capito bene il problema.
Ciao,
Luigi Di Biasi
http://www.dibiasi.it/
http://www.luigidibiasi.it
http://yadamp.unisa.it/
http://yadamp.unisa.it/grimd
http://www.cilentiamoci.it
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
mer 25 giu 2014 - 21:20
Ciao grazie per la risposta,
si hai centrato il problema solo che io ho 4 colonne nella listview
Dim item As New ListViewItem(thisReader.Item(0).ToString, 0)
item.SubItems.Add(thisReader.Item(1).ToString)
item.SubItems.Add(thisReader.Item(2).ToString)
item.SubItems.Add(thisReader.Item(3).ToString)
ListView1.Items.AddRange(New ListViewItem() {item})
in tutte le colonne ci sono duplicati il problema e che voglio ottenere questo:
Colonna1 colonna2 colonna3 colonna4
pippo casa rossa ottimo
porta gialla
maniglia
Non sò se ho reso l'idea
con il codice che mi hai gentilmente postato
Dim duplicati As ArrayList = New ArrayList
Dim thisReader As MySqlDataReader = thisCommand.ExecuteReader()
While (thisReader.Read())
' se è la prima volta che vedi questo elemento lo aggiungi
If Not duplicati.Contains(thisReader.Item(0).ToString) Then
duplicati.Add(thisReader.Item(0).ToString)
Else
Continue While
' se già lo hai visto precedentemente lo salti
End If
Dim item As New ListViewItem(thisReader.Item(0).ToString, 0)
item.SubItems.Add(thisReader.Item(1).ToString)
item.SubItems.Add(thisReader.Item(2).ToString)
item.SubItems.Add(thisReader.Item(3).ToString)
ListView1.Items.AddRange(New ListViewItem() {item})
End While
thisReader.Close()
ottengo questo:
Colonna1 colonna2 colonna3 colonna4
pippo casa rossa ottimo
manca il resto nelle colonne, pensi che c'è una soluzione al mio problema?
Grazie
Mau67
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
ven 27 giu 2014 - 15:11
Ciao provo e riprovo ma il risultato è sempre lo stesso!
c'è qualche altra soluzione?
Grazie
Mau67
luigidibiasi
Profilo
| Guru
1.077
messaggi | Data Invio:
ven 27 giu 2014 - 15:13
nella add invece di inserire solo il valore della prima colonna inserisci la concatenazione dei valori delle 4 colonne
> motd
dim key as string = thisReader.Item(1).ToString & thisReader.Item(2).ToString & thisReader.Item(3).ToString & thisReader.Item(4).ToString
if NOT duplicati.contains(key) then
duplicati.add(key)
else
continue ' se già lo hai visto precedentemente lo salti
end if
Luigi Di Biasi
http://www.dibiasi.it/
http://www.luigidibiasi.it
http://yadamp.unisa.it/
http://yadamp.unisa.it/grimd
http://www.cilentiamoci.it
Torna su
Stanze Forum
Elenco Threads
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 !