Séléction distincte dans un datatable

Soyez le premier à donner votre avis sur cette source.

Snippet vu 13 567 fois - Téléchargée 27 fois

Contenu du snippet

Permet de récupérer une séléction d'enregistrements uniques dans un datatable. Un peu à la manière du SELECT DISTINCT.

Source / Exemple :


Private Function selectDistincDataView(ByVal table As DataTable, ByVal champ As String) As DataTable

        Dim i As Int32
        Dim ret As Int16
        Dim dtResultat As New DataTable

        dtResultat.Columns.Add(champ, table.Columns(champ).GetType)
        dtResultat.DefaultView.Sort = champ
        dtResultat.DefaultView.ApplyDefaultSort = True

        For i = 0 To table.Rows.Count - 1
            If dtResultat.Rows.Count > 0 Then
                ret = dtResultat.DefaultView.Find(table.Rows(i)(champ))
                If ret = -1 Then
                    dtResultat.Rows.Add(dtResultat.NewRow)
                    dtResultat.Rows(dtResultat.Rows.Count - 1)(champ) = table.Rows(i)(champ)
                End If
            Else
                dtResultat.Rows.Add(dtResultat.NewRow)
                dtResultat.Rows(0)(champ) = table.Rows(0)(champ)
            End If
        Next

        Return dtResultat

    End Function

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2
Date d'inscription
vendredi 17 décembre 2004
Statut
Membre
Dernière intervention
11 août 2007

Merci pour vos commentaires.

Idbel : Je n'ai pas testé la source sur VS2005. Essaye de changer table.Columns(champ).GetType par table.Columns(champ).DataType.
Messages postés
5
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
4 août 2007

c'est genial votre code
j'ai mis
"Private Function selectDistincDataView(ByVal table As DataTable, ByVal champ As String) As DataTable"

car javais besoin de filtrer a partir d'une listview
et ca a bien marché en vb 2003 mais lorsque je lai converti en 2005 il m'a signaler une erreur de "type of value mismatch column"
au niveau de meme si les columns sont de meme type:
"dtResultat.Rows(0)(champ) = dataview(0)(champ)"
est ce que t'as une idée
merci
Messages postés
41
Date d'inscription
vendredi 9 juin 2006
Statut
Membre
Dernière intervention
27 septembre 2006

Wouaw !! je viens de gagner un temps précieux. Merci !!! 10/10.
Messages postés
4
Date d'inscription
jeudi 21 avril 2005
Statut
Membre
Dernière intervention
12 avril 2007

En effet, c'est simple et très intéressant. J'ai donc préféré ta solution à celle qui suit. Merci

Voici une autre manière de procéder, à savoir en implémentant une classe DataSetHelper que Microsoft propose.

FR:
http://support.microsoft.com/default.aspx?scid=kb%3Bfr%3B326176

ENG:
http://support.microsoft.com/default.aspx?scid=kb;en-us;326176
Messages postés
42
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
4 novembre 2008

Génial, je cherchais ça depuis un moment.
Merci !!!!

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.