1 votes

Comment ajouter des lignes d'éléments à un listview WPF et VB.net

Je deviens fou avec ça. C'est si facile dans Windows form, mais dans wpf cela semble être différent. Chaque exemple que je trouve est en C# et je ne peux pas l'adapter. Voici le code que j'ai. Pour l'instant, j'ai juste défini les colonnes :

 'diseño de las columnas
        Dim item As ListViewItem = New ListViewItem
        Dim Mi_Lista As GridView = New GridView
        Mi_Lista.AllowsColumnReorder = True

        Dim cine As New GridViewColumn()
        Dim Si3d As New GridViewColumn
        cine.Header = "Cine"
        cine.DisplayMemberBinding = New Binding("Cine")
        Si3d.DisplayMemberBinding = New Binding("si3D")
        cine.Width = 140
        Si3d.Header = "3D"
        Si3d.Width = 50
        Mi_Lista.Columns.Add(cine)
        Mi_Lista.Columns.Add(Si3d)

Merci d'avance.

1voto

itowlson Points 44174

Il y a deux façons de procéder :

  1. Ajoutez ListViewItems à la propriété ListView.Items. C'est la méthode WinForms, mais elle n'est pas idiomatique dans WPF.
  2. Définissez la propriété ListView.ItemsSource. WPF va alors créer une ligne pour chaque entrée de la collection ItemsSource. Dans ce cas, vous n'aurez pas besoin de créer vous-même des objets ListViewItem. C'est l'idiome WPF.

Pour l'option 2, écrivez quelque chose comme ceci :

Dim data As ObservableCollection(Of Something) = New ObservableCollection(Of Something)
' Populate the collection
lv.ItemsSource = data

Notez qu'ici lv est votre ListView, pas votre GridView. De plus, vous devriez normalement définir votre ListView et vos colonnes en XAML plutôt qu'en code, par ex.

<ListView Name="lv">
  <ListView.View>
    <GridView>
      <GridViewColumn Header="Cine"
                      DisplayMemberBinding="{Binding Cine}"
                      Width="140" />
    </GridView>
  </ListView.View>
</ListView>

0voto

modosansreves Points 1678

0voto

leviatan1001 Points 31

Oui, je l'ai reçu il y a quelques jours, merci. Pour les futurs utilisateurs :

Public Sub LlenarLista(ByVal película As String)
    ' MessageBox.Show(película)
    Dim dtLista As DataTable
    Dim dt As DataTable = New DataTable()
    Dim connetionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=Cinépolis.mdb"
    Dim connection As OleDbConnection = New OleDbConnection(connetionString)
    connection.Open()
    Dim da As OleDbDataAdapter = New OleDbDataAdapter("SELECT Cines.Nombre as nombre, Películas.Título, Proyecciones.[3D] AS p3d, Cines.web, Cines.Ubicacion as Ubicación, Cines.Parking FROM Películas INNER JOIN (Cines INNER JOIN Proyecciones ON Cines.IdCine = Proyecciones.IDCine) ON Películas.IDPelícula = Proyecciones.IDPelícula WHERE (((Películas.Título)='" & película & "')); ", connection)
    da.Fill(dt)
    dtLista = dt
    lvCines.DataContext = dtLista
    lvCines.SetBinding(ListView.ItemsSourceProperty, New Binding)

    connection.Close()

Y el diseño :

            <GridView ColumnHeaderTemplate="{StaticResource estiloCabecera}" >
                <GridViewColumn    Header="Cine" DisplayMemberBinding="{Binding nombre}"   />

                <GridViewColumn Header="3D" Width="50" DisplayMemberBinding="{Binding p3d}"/>
                <GridViewColumn Header="Web" Width="150" DisplayMemberBinding="{Binding web}"/>
            </GridView>
        </ListView.View>

    </ListView>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X