IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Créer une Liste d'une Classe Spécifique


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 134
    Par défaut Créer une Liste d'une Classe Spécifique
    Bonjour à tous,

    Avec ma Class suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    <Serializable()> Public Class ListeDesArticles
        Inherits List(Of Article)
     
        <NonSerialized()> Const NOM_DU_FICHIER As String = "Les Articles.gdm"
        <NonSerialized()> Private Shared _Instance As ListeDesArticles 
     
        <NonSerialized()> Public Event ArticleEnregistre()
        <NonSerialized()> Public Event DonneesCharge()
        <NonSerialized()> Public Event DonneesEnregistre()
     
     
        ' Retourne la Liste des Articles.
        Public Shared Function GetInstance() As ListeDesArticles
            If IsNothing(_Instance) AndAlso File.Exists(My.Settings.DossierStockageParDefaut & NOM_DU_FICHIER) Then
                Load()
            ElseIf IsNothing(_Instance) AndAlso Not File.Exists(My.Settings.DossierStockageParDefaut & NOM_DU_FICHIER) Then
                SyncLock GetType(ListeDesArticles)
                    _Instance = New ListeDesArticles
                End SyncLock
            End If
                Return _Instance
        End Function
     
        ' Charge le Fichier contenant les Données.
        Public Shared Sub Load(Optional Fichier As FileInfo = Nothing)
            Dim MonFichier As Stream
            If  Not IsNothing(Fichier) AndAlso Fichier.Exists Then
                MonFichier = File.OpenRead(Fichier.FullName)
            Else
                MonFichier = File.OpenRead(My.Settings.DossierStockageParDefaut & NOM_DU_FICHIER)
            End If
            Try
                Dim Charger As New BinaryFormatter()
                _Instance = CType(Charger.Deserialize(MonFichier), ListeDesArticles)
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                MonFichier.Close()
            End Try
        End Sub
     
        ' Retourne l'Article correspondant à l'Identifiant.
        Public Overloads ReadOnly Property Item(Id As Integer) As Article
            Get
                If Count > 0 Then
                    Return IIf(Count > 0, Find(Function(UnArticle) UnArticle.Id = Id), Nothing)
                Else
                    Return Nothing
                End If
            End Get
        End Property
     
        ' Retourne l'Article correspondant à sa Désignation ou son NNO (Par défaut : NNO)
        Public Overloads ReadOnly Property Item(StrValue As String, Optional ParDefaut As Boolean = True) As Article
            Get
                If Count > 0 Then
                    If ParDefaut Then
                        Return Find(Function(UnArticle) UnArticle.NNO = StrValue)
                    Else
                        Return Find(Function(UnArticle) UnArticle.Designation = StrValue)
                    End If
                Else
                    Return Nothing
                End If
            End Get
        End Property
     
     
     
        ' Crée une Liste D'article ou Charge une Liste existante.
        Private Sub New()
            MyBase.New()
        End Sub
     
        ' Retourne tous les Articles correspondant à la Valeur Recherché.
        Public Overloads Function FindAll(StrValue As String, Optional Type As String = "NNO") As ListeDesArticles
            If Count > 0 Then
                Select Case Type.ToUpper
                    Case "DESIGNATION"
                        Return FindAll(Function(UnArticle) UnArticle.Designation = "?" & StrValue & "?")
                    Case "GISEMENT"
                        Return FindAll(Function(UnArticle) UnArticle.Gisement = "?" & StrValue & "?")
                    Case Else
                        Return FindAll(Function(UnArticle) UnArticle.NNO = "?" & StrValue & "?")
                End Select
            Else
                Throw New ArgumentException("Aucun Articles n'est enregistrés.")
            End If
        End Function
     
        ' Retourne tous les Articles triés par Designation.
        Public Overloads Function Sort(NomDeColonne As String) As List(Of Article)
            If Count > 0 Then
                Select Case NomDeColonne
                    Case "Designation"
                        Return (From Element In Me Select Element Order By Element.Designation Ascending).ToList
                    Case "NNO"
                        Return (From Element In Me Select Element Order By Element.NNO Ascending).ToList
                    Case "Emplacement"
                        Return (From Element In Me Select Element Order By Element.Emplacement Ascending).ToList
                    Case "Installation"
                        Return (From Element In Me Select Element Order By Element.Installation Ascending).ToList
                    Case Else
                        Throw New ArgumentException("Choix du filtrage inconnu.")
                End Select
            Else
                Throw New ArgumentException("Aucun Articles n'est enregistrés.")
            End If
        End Function
     
    End Class
    Ainsi avec une seule Procédure, je peux utiliser le même objet avec des Données différentes et trier.

    Je souhaiterais pouvoir retourner un objet de type "ListeDesArticles" avec les fonction : "Sort" et "FindAll"
    J'ai essayé de chercher sur me NET, mais je ne sais toujours pas comment faire et surtout si c'est possible.
    Mon but étant de pouvoir faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Private Sub AffichageDesArticles(Liste As ListeDesArticles)
            ListeDesArticles_DTG.Rows.Clear()
            For Each UnArticle As Article In Liste
                ListeDesArticles_DTG.Rows.Add(UnArticle.Id.ToString, UnArticle.Designation, UnArticle.NNO, UnArticle.Quantite, UnArticle.QuantiteRecommande, UnArticle.Etat, UnArticle.Gisement, UnArticle.Emplacement, UnArticle.Installation)
            Next
        End Sub
    Je remercie d'avance toutes personnes susceptible de m'aider.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ajoute un constructeur qui prend en paramètre un IEnumerable(Of Article) et qui le passe au constructeur de la classe de base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Sub New(ByVal items As IEnumerable(Of Article))
        MyBase.New(items)
    End Sub
    Pour FindAll, remplace ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Return FindAll(Function(UnArticle) UnArticle.Designation = "?" & StrValue & "?")
    par ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Return New ListOfArticles(From unArticle In Me Where unArticle.Designation = "?" & StrValue & "?")
    Pour Sort, remplace ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Return (From Element In Me Select Element Order By Element.Designation Ascending).ToList
    par ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Return New ListOfArticles(From Element In Me Select Element Order By Element.Designation Ascending)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 134
    Par défaut
    Tout d'abord merci pour ta réponse. Je vais regarder et comprendre se que tu m'a écris et je te tiendrai au courant...

    encore une foi Merci....

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 134
    Par défaut
    Bonjour,

    Je viens d'éffectuer les modifications que tu m'as proposé. Cependant cela ne fonctionne pas pour les raisons suivantes :

    • Le code ci-dessous crée une Nouvelle liste vide, ainsi lors de la recherche dans celle-ci, elle retourne 0 Article.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Return New ListOfArticles(From unArticle In Me Where unArticle.Designation = "?" & StrValue & "?")

    CODE COMPLET :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
     
    <Serializable()> Public Class ListeDesArticles
        Inherits List(Of Article)
     
        <NonSerialized()> Const NOM_DU_FICHIER As String = "Les Articles.gdm"
        <NonSerialized()> Private Shared _Instance As ListeDesArticles 
     
        <NonSerialized()> Public Event ArticleEnregistre()
        <NonSerialized()> Public Event DonneesCharge()
        <NonSerialized()> Public Event DonneesEnregistre()
     
     
        ' Retourne la Liste des Articles.
        Public Shared Function GetInstance() As ListeDesArticles
            If IsNothing(_Instance) AndAlso File.Exists(My.Settings.DossierStockageParDefaut & NOM_DU_FICHIER) Then
                Load()
            ElseIf IsNothing(_Instance) AndAlso Not File.Exists(My.Settings.DossierStockageParDefaut & NOM_DU_FICHIER) Then
                SyncLock GetType(ListeDesArticles)
                    _Instance = New ListeDesArticles
                End SyncLock
            End If
                Return _Instance
        End Function
     
        ' Charge le Fichier contenant les Données.
        Public Shared Sub Load(Optional Fichier As FileInfo = Nothing)
            Dim MonFichier As Stream
            If  Not IsNothing(Fichier) AndAlso Fichier.Exists Then
                MonFichier = File.OpenRead(Fichier.FullName)
            Else
                MonFichier = File.OpenRead(My.Settings.DossierStockageParDefaut & NOM_DU_FICHIER)
            End If
            Try
                Dim Charger As New BinaryFormatter()
                _Instance = CType(Charger.Deserialize(MonFichier), ListeDesArticles)
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                MonFichier.Close()
            End Try
        End Sub
     
        ' Retourne l'Article correspondant à l'Identifiant.
        Public Overloads ReadOnly Property Item(Id As Integer) As Article
            Get
                If Count > 0 Then
                    Return IIf(Count > 0, Find(Function(UnArticle) UnArticle.Id = Id), Nothing)
                Else
                    Return Nothing
                End If
            End Get
        End Property
     
        ' Retourne l'Article correspondant à sa Désignation ou son NNO (Par défaut : NNO)
        Public Overloads ReadOnly Property Item(StrValue As String, Optional ParDefaut As Boolean = True) As Article
            Get
                If Count > 0 Then
                    If ParDefaut Then
                        Return Find(Function(UnArticle) UnArticle.NNO = StrValue)
                    Else
                        Return Find(Function(UnArticle) UnArticle.Designation = StrValue)
                    End If
                Else
                    Return Nothing
                End If
            End Get
        End Property
     
     
     
        ' Crée une Liste D'article ou Charge une Liste existante.
      Private Sub New(Optional ByVal Items As IEnumerable(Of Article) = Nothing)
            MyBase.New(Items)
        End Sub
     
        ' Retourne tous les Articles correspondant à la Valeur Recherché.
        Public Overloads Function FindAll(StrValue As String, Optional Type As String = "NNO") As ListeDesArticles
            If Count > 0 Then
               Select Case Type.ToUpper
                    Case "DESIGNATION"
                        Return New ListeDesArticles(FindAll(Function(UnArticle) UnArticle.Designation = "?" & StrValue & "?"))
                    Case "GISEMENT"
                        Return New ListeDesArticles(FindAll(Function(UnArticle) UnArticle.Gisement = "?" & StrValue & "?"))
                    Case Else
                        MsgBox("nno")
                        Return New ListeDesArticles(FindAll(Function(UnArticle) UnArticle.NNO = "?" & StrValue & "?"))
                End Select
            Else
                Throw New ArgumentException("Aucun Articles n'est enregistrés.")
            End If
        End Function
     
        ' Retourne tous les Articles triés par Designation.
        Public Overloads Function Sort(NomDeColonne As String) As List(Of Article)
            If Count > 0 Then
                  Select Case NomDeColonne
                    Case "Designation"
                        Return New ListeDesArticles(From Element In Me Select Element Order By Element.Designation Ascending).ToList
                    Case "NNO"
                        Return New ListeDesArticles(From Element In Me Select Element Order By Element.NNO Ascending).ToList
                    Case "Emplacement"
                        Return New ListeDesArticles(From Element In Me Select Element Order By Element.Emplacement Ascending).ToList
                    Case "Installation"
                        Return New ListeDesArticles(From Element In Me Select Element Order By Element.Installation Ascending).ToList
                    Case Else
                        Throw New ArgumentException("Choix du filtrage inconnu.")
                End Select
            Else
                Throw New ArgumentException("Aucun Articles n'est enregistrés.")
            End If
        End Function
     
    End Class

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Where unArticle.Designation = "?" & StrValue & "?"
    si tu souhaites faire un like c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Where unArticle.Designation LIKE  "*" & StrValue & "*"
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 134
    Par défaut
    Je te remercie pour ta réponse mais je doute que cela fonctionne pour la raison suivante :

    Le code ci-dessous crée une Nouvelle liste vide, ainsi lors de la recherche dans celle-ci, elle retourne 0 Article.
    Ainsi si tu as d'autres solutions, n'hésite pas....

Discussions similaires

  1. [Lisp][IA] Supprimer une liste d'une liste de listes
    Par Superleo2999 dans le forum Lisp
    Réponses: 5
    Dernier message: 22/03/2010, 10h51
  2. Réponses: 12
    Dernier message: 12/09/2007, 16h28
  3. [PRBL]Caste une liste d'une liste d'objet
    Par stephane92400 dans le forum Langage
    Réponses: 4
    Dernier message: 07/08/2007, 21h01
  4. Appel d'une liste dans une liste (JSTL)
    Par abalgue dans le forum Hibernate
    Réponses: 4
    Dernier message: 15/06/2007, 10h56
  5. STL : retirer une liste d'une liste
    Par DEVfan dans le forum SL & STL
    Réponses: 13
    Dernier message: 05/01/2007, 20h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo