.NET GUI

.NET Community rund um alle Graphical User Interface (GUI) Themen.
Willkommen bei .NET GUI. Anmeldung | Registrieren | Hilfe | Impressum | Forumsregeln
in Suchen

ListView im ListView

Letzter Beitrag 07-16-2008 11:26 von Norbert Eder. 5 Antworten.
Seite 1 von 1 (6 Treffer)
Beiträge sortieren: Zurück Weiter
  • 07-15-2008 17:05

    • Andreas
    • Top 50 Mitwirkender
      Männlich
    • Registriert am 07-15-2008
    • Berlin
    • Beiträge 7
    • Punkte 125

    ListView im ListView

    Hallo Allerseits!
    Kommt mir eigentlich wie eine einfache Frage vor, ich konnte bisher aber keine Lösung finden.
    Angenommen ich habe zwei Klassen "Eltern" und "Kinder", wobei die Kinder-Klasse für die eindeutige Zuordnung eine ElternID hat, damit es keine Waisenkinder in meiner Klasse gibt.
    Jetzt möchte ich die Eltern in einem ListView anzeigen und in jeder Zeile (wiederum als Liste) die dazugehörigen Sprösslinge.
    Wie mache ich das am einfachsten, besten, schönsten?
    (Das ganze soll letztlich zu einem Bericht und zu einer Druckvorschau führen, aber die Fragen, die mir da so einfallen, stelle ich lieber separat (z.B. nach Third-Party-Tools, die das Leben für die Berichterstellung vereinfachen))

    Vielen Dank für alle Antworten!
    Andreas

    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 07-16-2008 8:37 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 343
    • Punkte 5.249
    • ForumsAdministrator

    AW: ListView im ListView

    Hallo und herzlich willkommen :)

    Eigentlich nicht so schwierig. Ich hab dir mal ein kleines Beispiel gebaut. Dazu verwende ich Datenklassen für die Parents und die Children. Ebenfalls einen DataMock, welcher mir Testdaten erstellt:

    Parentklasse:
    public class Parent
    {
        private ChildCollection _children = new ChildCollection();
    
        public string FirstName { get; set; }
        public string LastName { get; set; }
    
        public ChildCollection Children
        {
            get { return _children; }
        }
    }
    
    public class ParentCollection : ObservableCollection<Parent>
    {
    }

    Child-Klasse:
    public class Child
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
    
    public class ChildCollection : ObservableCollection<Child>
    {
    }

    DataMock:
    public static class DataMock
    {
        private static ParentCollection _parents;
    
        public static ParentCollection GetParents()
        {
            if (_parents == null)
            {
                _parents = new ParentCollection();
    
                Parent p1 = new Parent() { FirstName = "Norbert", LastName = "Eder" };
                Parent p2 = new Parent() { FirstName = "Hugo", LastName = "Test" };
    
                Child c1 = new Child() { FirstName = "Child", LastName = "Uno" };
                Child c2 = new Child() { FirstName = "Child", LastName = "Due" };
    
                p1.Children.Add(c1);
                p2.Children.Add(c2);
    
                _parents.Add(p1);
                _parents.Add(p2);
            }
            return _parents;
        }
    }

    Damit wäre der Grundstock gelegt. Nun habe ich ein einfaches Fenster. Dieses enthält eine ListView, welcher das Ergebnis aus dem DataMock per ItemSource-Eigenschaft zugewiesen wird (bei mir jetzt einfach via Codebehind und nicht via XAML). Nun gibt es für die ListBoxItems ein eigenes DataTemplate, welches deren Aussehen definiert. In diesem DataTemplate wird eine weitere ListView definiert, welcher wiederrum ein DataTemplate für die Children zugewiesen wird:

    <Window x:Class="DotNetGui.ListViewInListViewDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:DotNetGui.ListViewInListViewDemo"
        Title="Nested ListView Demo" Height="Auto" Width="Auto">
        <Window.Resources>
    
            <DataTemplate x:Key="ChildrenTemplate">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="{Binding LastName}" Grid.Column="0"/>
                    <TextBlock Text="{Binding FirstName}" Grid.Column="1"/>
                </Grid>
            </DataTemplate>
            
            <DataTemplate x:Key="ParentTemplate">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>
                    <TextBlock Text="{Binding LastName}" Grid.Column="0" Grid.Row="0"/>
                    <TextBlock Text="{Binding FirstName}" Grid.Column="1" Grid.Row="0"/>
                    <ListView ItemsSource="{Binding Children}" ItemTemplate="{StaticResource ChildrenTemplate}" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1" BorderThickness="0"/>
                </Grid>
            </DataTemplate>
    
        </Window.Resources>
        
        <Grid>
            <ListView x:Name="DataListView" ItemTemplate="{StaticResource ParentTemplate}"/>
        </Grid>
    </Window>

    Und so sieht das aus (zugegeben nicht sehr schön, aber das kann ja noch verfeinert werden):



    Ich hoffe, das hilft dir soweit weiter.

    Abgelegt unter: , , ,
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 07-16-2008 10:10 Antwort zu

    • Andreas
    • Top 50 Mitwirkender
      Männlich
    • Registriert am 07-15-2008
    • Berlin
    • Beiträge 7
    • Punkte 125

    AW: ListView im ListView

    Hallo Norbert!
    Vielen Dank für die Willkommensgrüße und das ausführliche Beispiel!!
    Ich dachte, ich komme um das Erstellen einer Zwischenklasse herum (wenn es natürlich auch nicht sehr aufwendig ist [oh, das heisst ja wohl seit einiger Zeit "aufwändig"]).
    Parent- und Child-Klassen existieren bei mir ja bereits und beziehen ihre Daten aus einer Datenquelle (momentan XML-Datei).
    Wahrscheinlich funktioniert das ja auch mit einem DataSet mit einer entsprechenden Relation zwischen den Tabellen (Klassen), nur das ich das DataSet dann natürlich auch erst erstellen müsste.

    Ich dachte ursprünglich, es gäbe vielleicht eine einfache Möglichkeit, die ListViews an die ursprünglichen Klassen zu binden, und dann in jeder Parentzeile die entsprechenden Kinderchen auszufiltern.

    Servus
    Andreas


    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 07-16-2008 10:16 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 343
    • Punkte 5.249
    • ForumsAdministrator

    AW: ListView im ListView

    Welche Zwischenklasse meinst du genau? Den DataMock? Wenn ja, dann kann wäre dies bei dir einfach bei dir deine Datenquelle.

    Was du natürlich brauchst um deine Daten darzustellen sind Collections. Diese werden an die ListView gebunden und ausgesucht, was genau da wie angezeigt wird. Du kannst aber auch ein DataSet an die ListView binden. Ein einfaches Beispiel dazu habe ich auch vor kurzem erstellt: DataSet und Data Binding.
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 07-16-2008 11:18 Antwort zu

    • Andreas
    • Top 50 Mitwirkender
      Männlich
    • Registriert am 07-15-2008
    • Berlin
    • Beiträge 7
    • Punkte 125

    AW: ListView im ListView

    Mit Zwischenklasse meinte ich das , was in deinem Beispiel die Parent-Klasse ist.
    Meine vorhandene Parent-Klasse hat ja keine Children-Collection, sondern ist wie eine Datenbanktabelle, die erstmal keine Beziehung zu untergeordneten Elementen kennt.
    Ich werde das dann jetzt wie von dir beschrieben machen, vielen Dank noch einmal.

    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 07-16-2008 11:26 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 343
    • Punkte 5.249
    • ForumsAdministrator

    AW: ListView im ListView

    Ok. Bei weiteren Fragen kannst du dich ja gerne wieder melden.
    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
Seite 1 von 1 (6 Treffer)
Powered by Community Server (Commercial Edition)    Hosting powered by 69° media solutions