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 !
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:
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:
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:
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....