Séléction distincte dans un datatable

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 425 fois - Téléchargée 29 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
l0ren Messages postés 2 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 11 août 2007
11 août 2007 à 19:01
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.
Utilisateur anonyme
4 août 2007 à 11:40
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
cs_Red_Dragon Messages postés 41 Date d'inscription vendredi 9 juin 2006 Statut Membre Dernière intervention 27 septembre 2006
27 juin 2006 à 12:03
Wouaw !! je viens de gagner un temps précieux. Merci !!! 10/10.
ADSLASDL Messages postés 4 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 12 avril 2007
20 juin 2006 à 14:31
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
DocPhiphi Messages postés 42 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 4 novembre 2008
26 avril 2006 à 16:33
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.