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

Windows Presentation Foundation Discussion :

Remplir une listview [VB.NET]


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Par défaut Remplir une listview [VB.NET]
    Bonjour,

    Je souhaite utiliser une listview pour afficher des données, cependant je n'y arrive pas. 2 h que je cherche et tente différents trucs mais pas moyen ça me gave, donc je fais appel à vous


    Donc j'ai usercontrol qui contient un bouton "ajouter" . En cliquant sur ce bouton ça doit ajouter une ligne au listview qui contient trois colonnes.

    Et donc c'est ce que je n'arrive pas à faire, enfin si mais si je fais
    listview.items.add("ahah je comprends rien") , ça m'ajoute ça dans les 3 colonnes, alors que j'aimerai cibler la valeur à renseigner dans chaque colonne.


    Merci d'avance pour votre aide !

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Salut,

    Dans ton cas de figure, en WPF, on a plus tendance à s'orienter plus vers du binding d'une collection. Et le travaille d'ajout d'élément se fera directement sur la collection en question.

    Sinon avant de partir sur un exemple pas forcément adapté, peux-tu nous montrer ton code xaml pour voir comment tu as géré tes colonnes ?

    En fait j'ai l'habitude travailler avec un DataGrid quand j'ai des colonnes à gérer, aussi j'ai la flemme de rechercher comment créer une ListView avec des colonnes

  3. #3
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut ListView,items,itemsSource
    bonjour
    il y a 2 items et itemsSource.
    Le premier ajoute un element à la collection interne des elements du ListView.
    Le deuxieme sert à se "binder" à une liste complexe ou un datable.
    Ce qui m'etonne dans ton approche c'est que tu cherches à ajouter un element à la fois à un controle qui est prevu pour afficher une grille rectangulaire donc il faut des donnees "rectangulaires ou à 2 dimensions " type table,tableau ou liste complexe (lie à une classe).

    alors voici un exemple de ListView rempli à partir d'une liste type ObservableCollection qui gere un class Personne.
    code xaml:
    Code xaml : 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
     
    <Window x:Class="Window2"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ListView Defaut " Height="300" Width="300">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition  Height="217*"></RowDefinition>
                <RowDefinition  Height="45*"></RowDefinition>
            </Grid.RowDefinitions>
            <ListView   Grid.Row="0"  Name="monListView" ItemsSource="{Binding}">
                <ListView.View>
                    <GridView>
                        <GridView.Columns>
                            <GridViewColumn
                            Width='100' 
                            Header='Nom'
                            DisplayMemberBinding='{Binding Path=Nom}' />
                            <GridViewColumn
                            Width='100'
                            Header='Prenom'
                            DisplayMemberBinding='{Binding Path=Prenom}' />
                            <GridViewColumn
                            Width='100'
                            Header='Salaire'
                            DisplayMemberBinding='{Binding Path=Salaire}' />
                            <GridViewColumn
                            Width='100'
                            Header='DateNaissance'
                            DisplayMemberBinding='{Binding Path=DateNaissance}' />
                            <GridViewColumn
                            Width='100'
                            Header='CanCode'
                            DisplayMemberBinding='{Binding Path=CanCode}' />
                        </GridView.Columns>
                    </GridView>
                </ListView.View>
            </ListView>
            <Button Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="16,0,0,12" Name="BtnAdd" VerticalAlignment="Bottom" Width="75"
             Click="BtnAdd_Click">Add</Button>
        </Grid>
    </Window>
    code behind:

    Code vb.net : 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
     
    Imports System.Collections.ObjectModel
    Partial Public Class Window2
        Private objPersonne As Personne
        Private lstPersonnes As ObservableCollection(Of Personne) = New ObservableCollection(Of Personne)
        Public Sub New()
     
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            'DataContext vers PersonCollection
            Me.DataContext = lstPersonnes
        End Sub
        Private Sub BtnAdd_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
     
            For i As Integer = 0 To 9
                objPersonne = New Personne
                objPersonne.Nom = "NomItem " & (i + 1).ToString
                objPersonne.Prenom = "PrenomItem " & (i + 1).ToString
                objPersonne.Salaire = 500.0 * (i + 1).ToString
                objPersonne.DateNaissance = Date.Now.ToShortDateString
                objPersonne.CanCode = True
                lstPersonnes.Add(objPersonne)
            Next
        End Sub
    End Class
    'exemple de classe 
    Public Class Personne
     
        Dim m_nom As String
        Dim m_prenom As String
        Dim m_canCode As Boolean
        Public Sub New()
            m_nom = ""
            m_prenom = ""
            m_salaire = 0.0
            m_dateNaissance = Date.Now
            CanCode = False
     
        End Sub
        Public Property Nom() As String
            Get
                Return m_nom
            End Get
            Set(ByVal value As String)
                m_nom = value
            End Set
        End Property
        Public Property Prenom() As String
            Get
                Return m_prenom
            End Get
            Set(ByVal value As String)
                m_prenom = value
            End Set
        End Property
        Private m_salaire As Double
        Public Property Salaire() As Double
            Get
                Return m_salaire
            End Get
            Set(ByVal value As Double)
                m_salaire = value
            End Set
        End Property
     
        Private m_dateNaissance As Date
        Public Property DateNaissance() As Date
            Get
                Return m_dateNaissance
            End Get
            Set(ByVal value As Date)
                m_dateNaissance = value
            End Set
        End Property
     
        Public Property CanCode() As Boolean
            Get
                Return m_canCode
            End Get
            Set(ByVal value As Boolean)
                m_canCode = value
            End Set
        End Property
     
     
    End Class
    Evidement la personnalisation de l'aspect visuel des colonnes est une corvee par rapport à un listbox.
    Car le data template doit preciser l'aspect -une à une- des <GridViewColumn> dans la propriete <GridViewColumn.CellTemplate>

    Exemple de colonne "template" avec un TextBlock qu'il faut "taper" dans chacune des GridViewColumn precedentes :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <GridViewColumn
                            Width='100'
                            Header='Nom'>
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Foreground="Red" Background="Blue" Text="{Binding Path=Nom}" TextWrapping="Wrap"></TextBlock>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
    </GridViewColumn>
    Au final pour de simple liste "unaire" il faut utiliser un ListBox.
    Pour des liaisons complexe un Listview "more versatile".
    bon code....

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Par défaut
    Merci ! j'ai réussi à faire ce que je voulais grâce à ton code mabrouki

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. remplir une listview ado.net
    Par 241987 dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 23/03/2009, 11h22
  2. Remplir une ListView avec le contenu d'une requête
    Par callo dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 19/10/2006, 08h44
  3. Débutant : remplir une listview
    Par Alouka dans le forum MFC
    Réponses: 1
    Dernier message: 11/10/2006, 12h11
  4. [VBA-Excel]Problème pour remplir une listview
    Par Le Djé dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/01/2006, 16h27
  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