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 :

Remplir une listview a partir de control (textbox, calendar, etc) [Débutant]


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Autodidacte débutant
    Inscrit en
    Mai 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 55
    Points : 28
    Points
    28
    Par défaut Remplir une listview a partir de control (textbox, calendar, etc)
    Bonjour à tous,

    J'essaye de remplir une listview depuis un long moment mais je n'y arrive pas.

    J'ai tout d'abord plusieurs outils qui me servent à saisir mes données :

    un calendarDatePicker
    3 textbox
    et enfin un bouton valider
    J'aimerai qu'avec un clic sur le bouton valider, le contenu de ces controls soit ajouté dans ma listview sur une seule et même ligne.

    Voici le code XAML de la listview :

    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
     
    <ListView Name="listeDevoir" Grid.Row="1"  Margin="20">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Width="auto"
                                   FontFamily="Comic"
                                   FontSize="28"/>
                            <TextBlock Width="auto"
                                   FontFamily="Comic"
                                   FontSize="28"/>
                            <TextBlock Width="auto"
                                   FontFamily="Comic"
                                   FontSize="28"/>
                            <TextBlock Width="auto"
                                   FontFamily="Comic"
                                   FontSize="28"/>
                            <CheckBox IsChecked="False"/>
                        </StackPanel>                   
                    </DataTemplate>
                </ListView.ItemTemplate>            
            </ListView>

    Pour ce qui est du code VB le voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub buttonValiderdevoir_Click(sender As Object, e As RoutedEventArgs)
            Dim nouveauDevoir As New Devoir
            nouveauDevoir.newDevoir(dateDevoir.Date.ToString, textBoxType.Text, textBoxContenu.Text, textBoxClasse.Text, False)
            listeDevoir.Items.Add(nouveauDevoir)
        End Sub
    Si je lance le bouzin et que je clic sur mon bouton j'ai bien une ligne qui se rajoute à ma listview mais vide.

    Après une recherche sur internet, je tombe sur cette histoire de binding. Malheureusement le langage utilisé et C#.

    Je constate malgré tout qu'une classe est créée et ensuite que les items sont ajoutés dans la liste.

    Dans le xaml on ajoute un {Binding "attribut de classe"} (si j'ai bien tout compris)

    J'ai une classe comme vous pouvez le voir :

    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
     
    Public Class Devoir
            Private _dateDevoir As String
            Private _typeDevoir As String
            Private _contenuDevoir As String
            Private _classeDevoir As String
            Private _faitDevoir As Boolean
     
            Public Sub newDevoir(ByVal dateD As String, ByVal typeD As String, ByVal contenuD As String, classeD As String, faitD As Boolean)
                _dateDevoir = dateD
                _typeDevoir = typeD
                _contenuDevoir = contenuD
                _classeDevoir = classeD
                _faitDevoir = faitD
            End Sub

    J'essaye en ajoutant {Binding _dateDevoir} dans la déclaration Xaml correspondante et idem pour tous les autres mais sans succès.

    Pourriez vous m'aiguiller vers la bonne direction je vous prie ?



    Cordialement

  2. #2
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    bonjour,

    Lorsque tu souhaites utiliser un contrôle de la boite à outils de ton EDI (dans ton cas Listview) il faut regarder sur MSDN comment est constituee et comment utiliser cette classe "Listview" (propriétés, méthodes et implémentation)

    https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx

    Ensuite on se familiarise avec l outil (listview) dans une sorte de mini projet.

    En breffff ......

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    'on delare un tableau de string de taille '5' dans le cas ou ton listiew possède 5 colonnes !
    dim str as string() = new string (4){}
    'on affecte les valeurs a chaque future colonne
    str(0) = dateDevoir.Date.ToString
    str(1) = textBoxType.Text
    str(2) = textBoxContenu.Text
    str(3) = textBoxClasse.Text
    str(4) = "Non"
    'on declare et instancie un listviewitem qui peuplera une ligne de ton controle listview en tenant compte des 5 colonnes !
    Dim lvi As New ListViewItem(str)
    'on ajoute le listviewitem a ton listview
    listeDevoir.Items.Add(lvi)
    NB : j'ai fais au + simple, tu peux bien évidemment utiliser ta classe Devoir.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Autodidacte débutant
    Inscrit en
    Mai 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    Bonjour wallace1,

    Je comprend ce que tu me dis et la communauté sur quelques forums que ce soit dit sensiblement la même chose.
    Cependant je n'arrive pas à comprendre le site de microsoft.
    Quand je cherche un renseignement sur les Listview (et crois moi je l'ai fait) ce que je vois sur le site me perds encore d'avantage.

    Par exemple sur l'exemple donné par microsoft je ne vois rien qui correspond à ce que tu me donnes toi.

    Je n'ai pas un gros bagage et il m'est difficile de décrypter l'aide de microsoft aussi fournit soit il.
    J'apprend mieux avec des exemples concrets qui correspondent à mes besoins.

    Je te remercie de me permettre d'avancer sur mon problème avec ton code.
    Mais vois tu même ce code là me génère une erreur que je ne m'explique pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    'on delare un tableau de string de taille '5' dans le cas ou ton listiew possède 5 colonnes !
    dim str as string() = new string (4){}
    'on affecte les valeurs a chaque future colonne
    str(0) = dateDevoir.Date.ToString
    str(1) = textBoxType.Text
    str(2) = textBoxContenu.Text
    str(3) = textBoxClasse.Text
    str(4) = "Non"
    'on declare et instancie un listviewitem qui peuplera une ligne de ton controle listview en tenant compte des 5 colonnes !
    Dim lvi As New ListViewItem(str)
    'on ajoute le listviewitem a ton listview
    listeDevoir.Items.Add(lvi)
    La partie déclaration du listviewitem m'affiche une erreur sur le (str)
    "Arguments trop nombreux pour 'Public Overloads Sub New()"

  4. #4
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    oui et c'est tout a fait normal (promis ce n est pas volontaire^^) ......
    relis bien cette ligne :
    'on delare un tableau de string de taille '5' dans le cas ou ton listiew possède 5 colonnes !
    puis cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim str as string() = new string (4){}
    enfin comptes le nombre de colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    str(0) = dateDevoir.Date.ToString
    str(1) = textBoxType.Text
    str(2) = textBoxContenu.Text
    str(3) = textBoxClasse.Text
    str(4) = "Non"
    Conclusion :

    Premiere ligne : Je dis en commentaire que mon tableau est de taille 5
    Deuxieme ligne : J'affecte une taille de 4 a mon tableau de string
    Les autres lignes d affectation sont au nombre de 0 à 4 = ce qui corresponds a une taille de 5.
    Consequence : l'affectation str(4) = "Non" ne se fera pas car on est en dehors des limites du tableau : new string(4){}
    = taille 4 alors qu on a affecté 5 éléments !

    Tu sais ce qu il te reste à faire.

    La programmation c est aussi surtout une question de comprehension dans l énoncé

    Bon courage.

    @+

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Autodidacte débutant
    Inscrit en
    Mai 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    Pardon je me suis mal exprimé sans doute.
    Indépendamment de la taille du tableau (que je n'avait pas vérifié) l'erreur s'affiche bien avant la compilation en fait le tableau est souligné en rouge dans la déclaration du listview.

  6. #6
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par Ledidic Voir le message
    Pardon je me suis mal exprimé sans doute.
    Indépendamment de la taille du tableau (que je n'avait pas vérifié) l'erreur s'affiche bien avant la compilation en fait le tableau est souligné en rouge dans la déclaration du listview.
    screenshot please .....

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Autodidacte débutant
    Inscrit en
    Mai 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    Voilà

    Nom : erreur.png
Affichages : 2257
Taille : 15,9 Ko

  8. #8
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par Ledidic Voir le message
    Voilà

    Nom : erreur.png
Affichages : 2257
Taille : 15,9 Ko
    perso je suis en framework 4 sous app Windows Form et le listviewitem accepte un tableau de string .....est ce le cas pour toi en WPF ?? Regarde la signature du constructeur du listviewitem (grace a l autoCompletion).
    ++

  9. #9
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Arff ...my bad je n'ai jamais dev en WPF et oui visiblement ca ne fonctionne pas de la même manière qu'une app Win Forms...

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Autodidacte débutant
    Inscrit en
    Mai 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    Je ne sais pas voir comme tu le dis grâce a l'auto complétion.
    Ce que je peux te dire c'est que je suis sous visual studio 2015 community.
    Et que je peux voir framework 4.5 et 4.6 d'installer sur mon pc.

    Ca peux t'aider ?

    De plus je confirme tes dires sur windows form, ma précédente utilisation d'une listview m'avait posé moins de problème.

    Je rajoute que mise a part un tableau, les sites ou forums parlent aussi de liste d'objet ou de classe pour remplir la listview.
    Mais malgré les exemples je ne parviens pas a remplir ma liste.

  11. #11
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Ok donc en lisant bien la doc MSDN il faut effectivement utiliser un contrôle de type GridView et le binder aux propriétés d'une classe (c'est une méthode parmi d'autres visiblement) :

    - Tu ajoutes le Listview en mode concepteur
    - Tu le nommes Listview1 (dans mon exemple)
    - Tu ajoutes autant de colonnes que tu veux (dans mon exemple j'en ajoute 2) depuis la propriété Columns du contrôle Listview1
    - Tu définies la propriété Header pour chaque colonne (dans mon exemple Colonne 1 = Nom et colonne 2 = Age)
    - Tu définies une liaison de données depuis la propriété DisplayMemberBinding de chaque colonne (en chemin d'accès je mets le même nom que le Header) : Attention ce nom a son importance pour pouvoir récupérer ultérieurement la donnée BIndée !!
    - Tu reviens en partie code
    - Tu créés une classe qui porte les même nom de propriété que le chemin d'accès de chaque colonne définie précédement : Dans mon exemple je créé une classe Personne avec 2 propriétés Nom (String) et Age (Int)
    - Dans le gestionnaire d’événement Click de ton bouton pour ajouter dynamiquement un item au Listview1 tu instancies une List(Of Personne) puis tu instancies autant de personnes que tu souhaites en affectant les propriétés Nom et Age
    - Enfin tu affectes l'instance de list(of Personne) à l'itemSource de ton Listview1.

    Le designer ressemble à ceci :

    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
     
    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
        <Grid>
            <ListView x:Name="Listview1" HorizontalAlignment="Left" Height="204" Margin="36,73,0,0" VerticalAlignment="Top" Width="450" ItemsSource="{Binding}">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="Nom" Width="120" DisplayMemberBinding="{Binding Nom}" />
                        <GridViewColumn Header="Age" Width="50" DisplayMemberBinding="{Binding Age}" />
                    </GridView>
                </ListView.View>
            </ListView>
        </Grid>
    </Window>
    et la partie code (moi je l'ai mise dans l'event Loaded du MainWindow :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
       Dim items As New List(Of Personne)()
            items.Add(New Personne() With { _
                 .Nom = "Robert", _
                 .Age = 45})
     
            items.Add(New Personne() With { _
                       .Nom = "Bernard", _
                       .Age = 30})
     
            Listview1.ItemsSource = items
    Bon codage.

    NB : L'idéal serait de déclarer et instancier List(Of Personne) avec une portée de classe de manière à pouvoir mettre à jour l'item source à chaque ajout d'une personne. ...

    A+

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Autodidacte débutant
    Inscrit en
    Mai 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    Merci Wallace c'est beaucoup a digérer pour moi je vais m'y atteler.
    J'espère pouvoir compter sur toi si jamais je perds mes petits
    Bonne fin de soirée

  13. #13
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Pas de quoi, je vais me mettre au wpf grace à toi.

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Autodidacte débutant
    Inscrit en
    Mai 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    Bon et bien moi qui n'avait déjà plus trop de cheveux, cela ne s'arrange pas.
    Je n'arrive à rien.
    Malgré ton aide wallace je n'arrive pas a utiliser le Binding.
    Je ne comprend vraiment pas où se situe mes erreurs.
    J'ai essayé d'adapter ton wpf mais cela ne donne rien.

    J'ai fait de nouvelles recherches, le plus souvent donnée en C# ce qui ne m'aide pas du tout, je code en VB, mais rien n'y fait.
    De plus les solutions données remplissent toutes la listview directement dans le code. Alors que moi elle se remplit avec des controles.
    J'ai réussi à binder des controle a ma liste view mais évidement des que je change la valeur de ce control la list view est elle aussi changée logique.

    bref je seche.

  15. #15
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Je ne vois vraiment pas le problème...o_O..... Tu as dans les précédents messages tout ce dot tu as besoin pour faire ce que tu veux :

    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
     
     
    Class MainWindow
     
        Private items As New List(Of Personne)
     
        Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
            If TextBox1.Text <> String.Empty AndAlso Integer.TryParse(TextBox2.Text, 0) Then
                Dim person = New Personne() With { _
               .Nom = TextBox1.Text, _
               .Age = CInt(TextBox2.Text)}
     
                items.Add(person)
     
                Listview1.ItemsSource = Nothing
                Listview1.ItemsSource = items
            End If
        End Sub
    End Class
    PS : le code du designer est presque inchangé mis à part l'ajout de 2 textbox et 1 button.

    PS1 : il faudra certainement par la suite implémenter des méthodes d'ajout/suppression de personne dans ton List(Of personne) pour la gestion de MAJ de ton ItemSource.


    http://www.imabox.fr/16/06/181632K4oADy26.png

    A+

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Autodidacte débutant
    Inscrit en
    Mai 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    Toutes mes recherches doivent se percuter dans mon cerveau ^^
    Le code sur le bouton ajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub buttonValiderdevoir_Click(sender As Object, e As RoutedEventArgs)
            Dim items As New List(Of Devoir)
            Dim newDevoir As New Devoir
     
            newDevoir.nouveauDevoir(calendarDateDevoir.Date.ToString, textBoxType.Text, textBoxContenu.Text, textBoxClasse.Text, False)
            items.Add(newDevoir)
     
            listeDevoir.ItemsSource = Nothing
            listeDevoir.ItemsSource = items
     
     
        End Sub
    Et le Xaml :
    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
    <ListView Name="listeDevoir" Grid.Row="1" SelectionMode="Multiple" Margin="20"
                      CanReorderItems="True"
                      CanDragItems="True"
                      AllowDrop="True">
                <ListView.ItemTemplate>
                    <DataTemplate >
                        <StackPanel Orientation="Vertical" Background="LightGray" Margin="2">
                            <StackPanel Orientation="Horizontal" Height="60" >
                                <TextBlock Name="textDateD" 
                                           Text=""
                                           Width="auto"
                                           FontFamily="Comic"
                                           FontSize="28"
                                           Margin="20,0,20,0"
                                           VerticalAlignment="Center"/>
                                <TextBlock Name="textTypeD"
                                           Text=""
                                           Width="auto"
                                           FontFamily="Comic"
                                           FontSize="28"
                                           Margin="20,0,20,0"
                                           VerticalAlignment="Center"/>
                                <TextBlock Name="textContenuD" 
                                           Text=""
                                           Width="auto"
                                           FontFamily="Comic"
                                           FontSize="28"
                                           Margin="20,0,20,0"
                                           VerticalAlignment="Center"/>
                                <TextBlock Name="textClasseD"     
                                           Text=""
                                           Width="auto"
                                           FontFamily="Comic"
                                           FontSize="28"
                                           Margin="20,0,20,0"
                                           VerticalAlignment="Center"/>
                                <CheckBox IsChecked="False"/>
                                <Button FontFamily="Segoe MDL2 Assets"
                                        Content="&#xE10A;"
                                        FontSize="28"
                                        Background="Firebrick"
                                        Margin="0,0,10,0"
                                        Click="Button_Click" />
                            </StackPanel>
                            <Border BorderBrush="Firebrick"
                                    BorderThickness="1"/>
                        </StackPanel>                                                                              
                    </DataTemplate>
                </ListView.ItemTemplate>           
            </ListView>
    A l'exécution ma liste se remplit d'une ligne bien "designé", si je puis dire , mais vide de toutes données.
    Peut être que ma classe est mal créée, un constructeur foireux mais il ne me semble pas.

    En ce qui concerne la suppression et la mise a jour de ma liste, je peux me tourner vers les observableCollection, j'ai cru voir qu'elles permettaient de garder un oeil sur les changements.

  17. #17
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Tu n'as pas bindés tes propriétés de classe dans le GridView forcément cela ne peut pas fonctionner !

    Arrêtes de chercher sur la toile, toutes les infos pour débuter sont désormais accessibles dans ce topic.

    Je t'invite à refaire un mini projet en te servant du déroulé que j'ai posté plus haut pour bien comprendre comment ca fonctionne, ensuite seulement tu pourras envisager d'introduire une classe personnalisée dans ce même mini-Projet et enfin tu te projetteras dans ton vrai projet avec des notions acquises et maitrisées.

    Je te rappelle également que si tu veux récupérer tous les items depuis : items As List(Of Devoir) à chaque fois que tu appuies sur le bouton ajouter qu'il faille déclarer et instancier en porté e de classe et non en portée de méthode comme tu l'as fais (regardes bien mon dernier et avant dernier message).

    ObservableCollection possède des events qui peuvent te notifier l'ajout/suppression d'items ainsi tu pourrais mettre à jour l'itemSource.

    EDIT : Je viens de revoir ta classe Devoir et elle est foireuse car il n'y a pas de constructeur !!

    Comme cela ca devrait mieux fonctionner :

    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
     
    Public Class Devoir
            Property dateDevoir As String
            Property typeDevoir As String
            Property contenuDevoir As String
            Property classeDevoir As String
            Property faitDevoir As Boolean
     
           Sub New (ByVal dateD As String, ByVal typeD As String, ByVal contenuD As String, classeD As String, faitD As Boolean)
                _dateDevoir = dateD
                _typeDevoir = typeD
                _contenuDevoir = contenuD
                _classeDevoir = classeD
                _faitDevoir = faitD
            End Sub


    A+

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Autodidacte débutant
    Inscrit en
    Mai 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    Pour le Binding j'ai fais les corrections dans plusieurs essais.
    Par exemple pour le textBlock de nom textdateD j'ai mis dans son champ text="{Binding dateDevoir}" ou dateDevoir est un attribut de ma classe.
    Cependant un message me dit que "BindingExpression path error: 'dateDevoir' property not found on 'mesCoursUWP.Devoir"
    Du coup je me demande si ma classe est bien construite.
    Je l'ai créée dans un module.vb séparé peut être que ca peu poser problème.

    Je te rappelle également que si tu veux récupérer tous les items depuis : items As List(Of Devoir) à chaque fois que tu appuies sur le bouton ajouter qu'il faille déclarer et instancier en porté e de classe et non en portée de méthode comme tu l'as fais (regardes bien mon dernier et avant dernier message).
    En revanche là je ne comprend pas ce que tu veux me dire

    Pour ce qui est de tester sur un ptit projet, cela me semble une bonne idée.

  19. #19
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par Ledidic Voir le message
    Je l'ai créée dans un module.vb séparé peut être que ca peu poser problème.
    Oublies les modules.....

    Citation Envoyé par Ledidic Voir le message
    En revanche là je ne comprend pas ce que tu veux me dire
    C'est pourtant simple :

    0- L'utilisateur ouvre ton application
    1- L'utilisateur appuie sur le bouton ajouter un devoir
    2- Une nouvelle instance de ta liste de devoir est créée dans ta méthode
    3- Tu instancies un devoir (+affectation des propriétés) et tu l'ajoutes à ta liste des devoirs instanciée au point N°2
    4- Tu mets à jour ton ItemSource
    5- L'item est ajouté au ListView

    A ce stade ta liste de devoirs déclarée et instanciée dans ta méthode contient 1 élément

    6- L'application est toujours ouverte
    7- L'utilisateur décide d'ajouter un nouveau devoir
    8--->- Une nouvelle instance de ta liste de devoir est créée dans ta méthode, la 1ère instance est perdue donc le devoir ajouté plus haut est également perdu !
    9--->-...etc...
    10--->-Tu mets à jour ton ItemSource avec cette 2ème instance de ta liste de devoir
    11--->-L'item est ajouté au ListView

    Moralité tu n'auras à chaque fois qu'un seul item dans ton listView !
    Pour résoudre cela il faut déclarer et instancier ta list(Of Devoirs) en porté e de classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Class MainWindow
     
        'Portée de classe
        Private items As New List(Of Devoir)
     
        Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
          'Portée de méthode
          'Dim items As New List(Of Devoir)
     
        End Sub
    End Class
    A+

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Autodidacte débutant
    Inscrit en
    Mai 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    Je crois avoir saisi la différence et en effet ce qui devait se passer se passa (1 élément dans la liste)

    Je me rend compte qu'en plus du manque de pratique et d'expérience, ma logique est à revoir

    Je te remercie grandement pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Débutant] Remplir une listview à partir d'un bouton de recherche
    Par NABZ27 dans le forum C#
    Réponses: 1
    Dernier message: 01/10/2014, 13h50
  2. Remplir une base MySql à partir des textBox
    Par Chevaan dans le forum C#
    Réponses: 7
    Dernier message: 02/03/2012, 17h07
  3. Remplir une listview à partir d'un tableau Array
    Par Gecoo dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 29/04/2010, 16h05
  4. [XL-2007] Remplir une listview à partir d'une feuille de calcul ou de textbox
    Par rvtoulon dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/10/2009, 23h43
  5. Remplir une ListView avec une BD
    Par manikou dans le forum MFC
    Réponses: 1
    Dernier message: 17/05/2005, 09h48

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