2016-10-04 3 views
1

Wie der Titel sagt, versuche ich ein DataGrid in DataGrid zu bekommen. Mit meinem Code werden nichts als die Spaltennamen angezeigt. Irgendwann konnte ich die Daten vom ersten DataGrid zeigen, aber jetzt gibt es einfach nichts mehr.WPF Visual C# DataGrid in einem DataGrid

XAML:

<Window x:Class="WpfDataGridSample.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="200" Width="400"> 
    <Grid Margin="10"> 
     <DataGrid Name="dgUsers" AutoGenerateColumns="False" ItemsSource="{Binding User}"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Name" Binding="{Binding Name}" /> 
       <DataGridTextColumn Header="Birthday" Binding="{Binding Birthday}" /> 
      </DataGrid.Columns> 
      <DataGrid.RowDetailsTemplate> 
       <DataTemplate> 
        <DataGrid Name="dgUserAddress" AutoGenerateColumns="False" ItemsSource="{Binding Address}"> 
         <DataGrid.Columns> 
          <DataGridTextColumn Header="Street" Binding="{Binding Street}" /> 
          <DataGridTextColumn Header="Number" Binding="{Binding Number}" /> 
         </DataGrid.Columns> 
        </DataGrid> 
       </DataTemplate> 
      </DataGrid.RowDetailsTemplate> 
     </DataGrid> 
    </Grid> 
</Window> 

XAML.CS:

namespace WpfDataGridSample 
{ 
    public partial class MainWindow: Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      List<User> User = new List<User>(); 

      var user1 = new User() 
      { 
       Id = 1, 
       Name = "John Doe", 
       Birthday = new DateTime(1971,7,23) 
      }; 

      user1.Address.Add(new Address() 
      { 
       Street = "Teststreet1", 
       Number = 1 
      }); 

      user1.Address.Add(new Address() 
      { 
       Street = "Teststreet1", 
       Number = 11 
      }); 

      User.Add(user1); 

      var user2 = new User() 
      { 
       Id = 2, 
       Name = "Jane Doe", 
       Birthday = new DateTime(1974,1,17) 
      }; 

      user2.Address.Add(new Address() 
      { 
       Street = "Teststreet2", 
       Number = 2 
      }); 

      user2.Address.Add(new Address() 
      { 
       Street = "Teststreet2", 
       Number = 22 
      }); 

      User.Add(user2); 

      var user3 = new User() 
      { 
       Id = 3, 
       Name = "Sammy Doe", 
       Birthday = new DateTime(1991,9,2) 
      }; 

      user3.Address.Add(new Address() 
      { 
       Street = "Teststreet3", 
       Number = 3 
      }); 

      user3.Address.Add(new Address() 
      { 
       Street = "Teststreet3", 
       Number = 33 
      }); 

      User.Add(user3); 
     } 
    } 

    public class User 
    { 
     public int Id { get; set; } 

     public string Name { get; set; } 

     public DateTime Birthday { get; set; } 

     public List<Address> Address { get; set; } 

     public User() 
     { 
      Address = new List<Address>(); 
     } 
    } 

    public class Address 
    { 
     public string Street { get; set; } 
     public int Number { get; set; } 
    } 
} 

Antwort

0

Try this:

namespace WpfDataGridSample { 
public partial class MainWindow : Window { 

    public List<User> User { get; set; } 

    public MainWindow() { 
     InitializeComponent(); 

     User = new List<User>(); 

     var user1 = new User() { 
      Id = 1, 
      Name = "John Doe", 
      Birthday = new DateTime(1971, 7, 23) 
     }; 

     user1.Address.Add(new Address() { 
      Street = "Teststreet1", 
      Number = 1 
     }); 

     user1.Address.Add(new Address() { 
      Street = "Teststreet1", 
      Number = 11 
     }); 

     User.Add(user1); 

     var user2 = new User() { 
      Id = 2, 
      Name = "Jane Doe", 
      Birthday = new DateTime(1974, 1, 17) 
     }; 

     user2.Address.Add(new Address() { 
      Street = "Teststreet2", 
      Number = 2 
     }); 

     user2.Address.Add(new Address() { 
      Street = "Teststreet2", 
      Number = 22 
     }); 

     User.Add(user2); 

     var user3 = new User() { 
      Id = 3, 
      Name = "Sammy Doe", 
      Birthday = new DateTime(1991, 9, 2) 
     }; 

     user3.Address.Add(new Address() { 
      Street = "Teststreet3", 
      Number = 3 
     }); 

     user3.Address.Add(new Address() { 
      Street = "Teststreet3", 
      Number = 33 
     }); 

     User.Add(user3); 

     this.DataContext = this; 
    }  
} 

public class User { 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public DateTime Birthday { get; set; } 

    public List<Address> Address { get; set; } 

    public User() { 
     Address = new List<Address>(); 
    } 
} 

public class Address { 
    public string Street { get; set; } 
    public int Number { get; set; } 
} 
} 

ich auf meinem Rechner getestet haben und es funktioniert gut ...

+0

Wie ich es versuchte, es warf nur Fehler, konnte es nicht sogar kompilieren:/ –

+0

Kannst du den Fehler, pls? – Michelle

+0

Nun gibt es 115 Fehler: S 'InitializeComponent(); öffentliche Liste Benutzer {get; einstellen; } var user1 = new User() { Id = 1, Name = "John Doe", Geburtstag = new Datetime (1971,7,23) }; 'u wie dieses meaned? –

0
List<User> User = new ObservableCollection<User>(); 

DataContext = this; 

legt den Datenkontext fest und informiert über die Änderungen in der Auflistung.

+0

Ich versuchte es aber 'List ' ist nicht möglich, also änderte ich es zu 'ObservableCollection ', aber das Ergebnis war immer noch dasselbe –