Multicolumn Listview in VB befüllen

  • WPF

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Glossy Cherry.

    Multicolumn Listview in VB befüllen

    Hey,

    Ich suche schon seit einiger Zeit heute nach der Lösung eine Multi Column Listview in WPF per Code zu befüllen.

    In Winforms hatte ich einfach immer Subitems genutzt, diese Eigenschaft gibts aber in WPF nicht und nach langem googlen ergaben sich auch nur so Lösungen wie: Listview.items.add(new {bla = bla}) dies gibts aber unter VB nicht da es dann folgende Fehlermeldung wirft: Typ oder "With" erwartet

    //Edit: Nach langem suchen ergab sich ein Link der weiterhalf, hier für die suchenden: truefuture.de/wordpress/?p=303

    Danke schonmal im vorraus.
    Greetz
    Moderatorin: "Apropo ritzen.." Shin Chan: "hoho sie hat Po ritze gesagt"
    "saying to buy a mac because your anti-virus expired is like saying you're out of condoms so you're just going to go fuck dudes"
    "Wie auch in anderen Threads kann ich leider nichts bieten außer vielleicht spaß beim Skypen aber mehr leider auch nicht." - Sind kinder pornos nicht verboten?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Glossy Cherry“ ()

    Ich hab da was für dich:

    XML-Quellcode

    1. <ListView Name="LW">
    2. <ListView.View>
    3. <GridView>
    4. <GridViewColumn Header="Eins" DisplayMemberBinding="{Binding Eins}"/>
    5. <GridViewColumn Header="Zwei" DisplayMemberBinding="{Binding Zwei}"/>
    6. <GridViewColumn Header="Drei" DisplayMemberBinding="{Binding Drei}"/>
    7. </GridView>
    8. </ListView.View>
    9. </ListView>

    VB.NET-Quellcode

    1. Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
    2. LW.Items.Add(New With {Key .Eins = "val1", Key .Zwei = "val2", Key .Drei = "val3"})
    3. End Sub


    mfG

    Derfuhr
    Vielen Dank, dsa war genau die Lösung die ich ungefähr 3 Minuten vorher fand, jedoch sieht das etwas kürzer aus als der fuck den ich gefunden hab, ich probiers mal aus..

    //Funktioniert, danke. Ist auch besser als das Klassen rumgefucke das auf der Seite angeboten wurde.
    Moderatorin: "Apropo ritzen.." Shin Chan: "hoho sie hat Po ritze gesagt"
    "saying to buy a mac because your anti-virus expired is like saying you're out of condoms so you're just going to go fuck dudes"
    "Wie auch in anderen Threads kann ich leider nichts bieten außer vielleicht spaß beim Skypen aber mehr leider auch nicht." - Sind kinder pornos nicht verboten?
    Ich hoffe der Edit bug tritt ned nur bei mir auf, denn es nervt jedesmal ũngefähr 5 minuten zu warten..
    Ich möchte nur ungern einen neuen Topic öffnen da diese Frage sich schon auf den selben Code bezieht, wenn dies nicht so ist, bitte aus diesem Topic den Beitrag heraus reißen, danke.

    Wie könnte ich die 2. Spalte vom SelectedItem auslesen, ohne wieder eine Klasse anzulegen welche die Spalten darstellt?
    Moderatorin: "Apropo ritzen.." Shin Chan: "hoho sie hat Po ritze gesagt"
    "saying to buy a mac because your anti-virus expired is like saying you're out of condoms so you're just going to go fuck dudes"
    "Wie auch in anderen Threads kann ich leider nichts bieten außer vielleicht spaß beim Skypen aber mehr leider auch nicht." - Sind kinder pornos nicht verboten?
    Ich hab da was gebraut. Allerdings wirst du ohne eine Klasse für die Items + List(of T) dieser Klasse glaubich nicht weiterkommen.

    XML-Quellcode

    1. <Window x:Class="MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. Title="MainWindow" Height="350" Width="525">
    5. <Grid>
    6. <ListView Name="LW">
    7. <ListView.View>
    8. <GridView>
    9. <GridViewColumn Header="Eins" DisplayMemberBinding="{Binding Eins}"/>
    10. <GridViewColumn Header="Zwei" DisplayMemberBinding="{Binding Zwei}"/>
    11. <GridViewColumn Header="Drei" DisplayMemberBinding="{Binding Drei}"/>
    12. </GridView>
    13. </ListView.View>
    14. </ListView>
    15. <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="390,234,0,0" Name="Button1" VerticalAlignment="Top" Width="75" />
    16. </Grid>
    17. </Window>

    VB.NET-Quellcode

    1. Class MainWindow
    2. Dim LW_Items As New List(Of My_LW_Items)
    3. Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
    4. LW_Items.Add(New My_LW_Items("a", "b", "c"))
    5. LW_Items.Add(New My_LW_Items("d", "e", "f"))
    6. LW_Items.Add(New My_LW_Items("g", "h", "i"))
    7. LW.ItemsSource = LW_Items
    8. End Sub
    9. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
    10. MessageBox.Show(LW_Items(1).Zwei.ToString)
    11. End Sub
    12. Public Class My_LW_Items
    13. Public Sub New(ByVal c0 As String, ByVal c1 As String, ByVal c2 As String)
    14. _cell0 = c0
    15. _cell1 = c1
    16. _cell2 = c2
    17. End Sub
    18. Private _cell0 As String
    19. Public Property Eins() As String 'Remember Eins, Zwei... <GridViewColumn Header="Eins" DisplayMemberBinding="{Binding Eins}"/>
    20. Get
    21. Return _cell0
    22. End Get
    23. Set(ByVal value As String)
    24. _cell0 = value
    25. End Set
    26. End Property
    27. Private _cell1 As String
    28. Public Property Zwei() As String
    29. Get
    30. Return _cell1
    31. End Get
    32. Set(ByVal value As String)
    33. _cell1 = value
    34. End Set
    35. End Property
    36. Private _cell2 As String
    37. Public Property Drei() As String
    38. Get
    39. Return _cell2
    40. End Get
    41. Set(ByVal value As String)
    42. _cell2 = value
    43. End Set
    44. End Property
    45. End Class
    46. End Class


    mfG

    Derfuhr
    Jap so hatt ich es vorhin auch, fand die Lösung die mir danach genannt wurde aber kürzer, was fürn dreck das ich jedesmal ne klasse erstellen muss..
    Ich bräuchte ja nur die zweite column vom selected item, gibts da nicht nen kürzeren weg wie für das hinzufügen?
    Moderatorin: "Apropo ritzen.." Shin Chan: "hoho sie hat Po ritze gesagt"
    "saying to buy a mac because your anti-virus expired is like saying you're out of condoms so you're just going to go fuck dudes"
    "Wie auch in anderen Threads kann ich leider nichts bieten außer vielleicht spaß beim Skypen aber mehr leider auch nicht." - Sind kinder pornos nicht verboten?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Glossy Cherry“ ()

    Ich hab vorhin fast alle was Intellisense mir anbot und mir sinnvoll erschien Probiert, ohne erfolg.Im Netz findet man auch nichts. Finde es auch blöd das man nun für Listview´s ´ne extra Klasse nutzen muss. Da hat MS sich was einfallen lassen, in Winforms war die Listview echt einfacher zu nutzen. Ich werd mir auf jeden Fall demnächst ein passendes UserControl für solche Zweccke machen wo das dann implementiert ist.
    Ich hab jetzt einfach .tostring durchn split gejagt, wenn ich zeit hab bau ich mir hierfür ne klasse die mir dann die entsprechende row rausgibt.

    Hier nochmal für die suchenden schnell was zusammengeklatscht:

    VB.NET-Quellcode

    1. Public Function parse_listviewitem(ByVal listviewitem As String, ByVal column As Integer) As String
    2. Return listviewitem.Trim.Replace(" ", vbNullString).Replace("}", vbNullString).Replace("{", vbNullString).Split(","c)(column - 1).Split("="c)(1)
    3. End Function

    Aufrufbeispiel:

    VB.NET-Quellcode

    1. parse_listviewitem(ListView1.SelectedItem.ToString, 5)

    gibt die 5. Column zurück.

    Könnte man sicher auch mit json lösen, aber wie gesagt ist schnell gemacht.

    Hiermit ist der Topic erledigt, danke für die Hilfe.
    Moderatorin: "Apropo ritzen.." Shin Chan: "hoho sie hat Po ritze gesagt"
    "saying to buy a mac because your anti-virus expired is like saying you're out of condoms so you're just going to go fuck dudes"
    "Wie auch in anderen Threads kann ich leider nichts bieten außer vielleicht spaß beim Skypen aber mehr leider auch nicht." - Sind kinder pornos nicht verboten?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Glossy Cherry“ ()

    Glossy Cherry schrieb:

    was fürn dreck das ich jedesmal ne klasse erstellen muss.
    offTopic: Hat deine mit Kraft-Ausdrücken angereicherte Sprache iwie einen besonderen Grund?

    @Topic
    Wpf ist für den MVVM-Pattern designed. Und der sieht vor, dass man für alle Daten jeweils eine eigene Klasse erstellt.
    Man würde die Properties der Datensätze natürlich sinnvoller benamen als "Eins", "Zwei", "Drei".
    Für die Suchenden: MVVM–Pattern (Josh Smiths Artikel)

    ErfinderDesRades schrieb:

    offTopic: Hat deine mit Kraft-Ausdrücken angereicherte Sprache iwie einen besonderen Grund?
    @ErfinderDesRades: Wenn die Frage immernoch besteht, würde ich diese gerne per PM klären, andernfalls darauf verzichten, da der Topic erledigt ist.
    Moderatorin: "Apropo ritzen.." Shin Chan: "hoho sie hat Po ritze gesagt"
    "saying to buy a mac because your anti-virus expired is like saying you're out of condoms so you're just going to go fuck dudes"
    "Wie auch in anderen Threads kann ich leider nichts bieten außer vielleicht spaß beim Skypen aber mehr leider auch nicht." - Sind kinder pornos nicht verboten?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Glossy Cherry“ ()