簡體   English   中英

DataGrid中的WPF Visual C#DataGrid

[英]WPF Visual C# DataGrid in a DataGrid

正如標題所說,我嘗試在DataGrid中獲取DataGrid。 使用我的代碼,只有Columnnames出現。 在某些時候,我可以顯示來自第一個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; }
    }
}

嘗試這個:

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;

將設置數據上下文,並通知視圖有關集合中的更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM