WPF Visual C# DataGrid in a DataGrid

本文关键字:DataGrid in Visual WPF | 更新日期: 2023-09-27 18:11:38

正如标题所说,我试图在DataGrid中获得一个DataGrid。在我的代码中,没有任何列名称显示。在某个时刻,我可以显示第一个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; }
    }
}

WPF Visual C# DataGrid in a DataGrid

试试这个:

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; }
}
}

我在我的机器上测试过,它工作得很好。。。

List<User> User = new ObservableCollection<User>();
DataContext = this;

将设置数据上下文,并向视图通知集合中的更改。