2014-04-21 3 views
0

J'utilise une requête SQL pour récupérer des données et écrire dans une liste. Cependant, un élément peut parfois avoir plus d'une valeur.Meilleur moyen de lire le tableau Lisbox

IE:

données: "Information patient" Valeur: "Rencontre"

ou

données: "Information patient" Valeur: "Commander"

Dans la zone de liste , l'élément de campagne affichera uniquement "Patient Disclosure" mais j'ai les valeurs écrites dans le tableau. Cependant, je ne veux pas que deux éléments du même élément apparaissent. La valeur "order" devrait être la seule à apparaître si elle a plusieurs valeurs. Comment puis-je faire ceci?

While reader.Read() 
    Dim Myitem As New List(Of myitems) 
    Myitem.Add(New myitems with {.Description = reader(0), .Value = reader(2)}) 
    '    If reader(2) = "Order" Then 
    '     listBox1.Items.Add(Myitem.ToArray) 
    '    Else 
    '     listBox1.Items.Add(reader(0)) 
    '    End If 

    listBox1.Items.AddRange(Myitem.ToArray) 
End While 
+0

puisque la source est un DB pourquoi ne pas utiliser un DataGridView qui supporte facilement les colonnes? – Plutonix

+0

Je ne veux pas que toutes les colonnes soient disponibles pour l'utilisateur. Ils ne devraient voir que la partie "données". – You

+0

à quoi ressemble 'MyItem'? vous pourriez simplement remplacer la fonction 'ToString' pour retourner tout ce que vous voulez montrer, puis stocker simplement les objets myItem dans la listbox (voir ci-dessous) (DGV peut avoir des colonnes cachées - beaucoup le font) – Plutonix

Répondre

1

Vous pouvez éliminer les doublons avec

listBox1.Items.AddRange(Myitem.Distinct().ToArray()) 

Cependant, je ne suis pas sûr de ce que vous demandez. La bonne chose à faire est de créer une classe qui contient vos données, au lieu de travailler directement avec les lecteurs de données, comme vous l'avez déjà fait. Donnez-lui un nom plus descriptif que myitems. En tant que développeurs, nous travaillons constamment avec de nombreux types d '"objets".

Public Class Patient // Or whatever the items are supposed to represent. 
    Public Property Description As String 
    Public Property Value As String 

    Public Overrides Function ToString() As String 
     Return String.Format("Description = {0}, Value = {1}", Description, Value) 
    End Function 
End Class 

Si vous ajoutez Patient objets à un ListBox, le ListBox utilisera automatiquement ToString pour afficher les éléments.

Vous pouvez également remplacer Equals et GetHashCode afin d'influencer la façon dont deux objets sont comparés. La méthode Distinct utilisera ces deux méthodes pour faire son travail. Voir: Implementing the Equals Method

Questions connexes