【问题标题】:Display row details as datagrid将行详细信息显示为数据网格
【发布时间】:2016-11-24 20:40:28
【问题描述】:

我有一个数据网格,其中项目是列表(只是一个更容易理解的示例):

public class Person
{
  public string FirstName { get; set; }
  public string LastName { get; set; }

  public List<Company> Companies { get; set; }
}

public class Company 
{
  public string Name { get; set; }
  public string City { get; set; }
}

现在我想在我的 RowDetailsTemplate 中显示公司。

我已经尝试过这样做

<DataGrid.RowDetailsTemplate>
        <DataTemplate>
            <DataGrid ItemsSource="{Binding Companies}">
                [im trying to access the data of the row here]
            </DataGrid>
        </DataTemplate>
</DataGrid.RowDetailsTemplate>

我的数据网格的 ItemsSource 是一个列表(它是只读的,它只是用于显示,而不是编辑数据。)

我的问题是,我似乎无法访问公司,而是 VS/R# 只说 List&lt;Person&gt;(在我的 viewModel 中名为 Persons)可用。

但我想访问每行的数据,而不是所有行的每个数据。我该怎么做?

【问题讨论】:

  • 那么您想访问所选行的详细信息(公司)吗?你在 MVVM 中吗?
  • 是的,是的。我用棱镜,如果有帮助的话。好吧,无论如何,我打算显示所有详细信息,但这是 RowDetailsTemplate 提供的功能
  • 但我想访问我的行的数据你这里的我的行是什么意思?
  • 你知道,每一行都由一个 ViewModel 表示。这个视图模型有一个公司列表。我希望这些公司在数据网格中的行的详细视图中。我的行不具体,每一行都一样。
  • 你已经在这样做了。每行表示为Person,行的详细信息将显示相应行Companies的公司列表。

标签: c# wpf datagrid detailview


【解决方案1】:

让我用一个例子来解释你。复制粘贴以下代码并将断点放在get 的get 和set 上。

现在运行代码并单击不同的行。您将获得相应的行项目,其中包含详细信息列表。

MainWindow.xaml

    <DataGrid ItemsSource="{Binding Employees}" SelectedItem="{Binding SelectedEmployee}" >
        <DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <DataGrid ItemsSource="{Binding Details}"/>
            </DataTemplate>
        </DataGrid.RowDetailsTemplate>
    </DataGrid>

MainWindow.xaml.cs

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        var detail1 = new EmployeeDetails() { ManagerID = 11, ManagerName = "11 Name", ManagerMobile = "123456" };
        var detail2 = new EmployeeDetails() { ManagerID = 12, ManagerName = "12 Name", ManagerMobile = "123456" };
        var detail3 = new EmployeeDetails() { ManagerID = 13, ManagerName = "13 Name", ManagerMobile = "123456" };

        var detail4 = new EmployeeDetails() { ManagerID = 11, ManagerName = "11 Name", ManagerMobile = "123456" };
        var detail5 = new EmployeeDetails() { ManagerID = 12, ManagerName = "12 Name", ManagerMobile = "123456" };
        var detail6 = new EmployeeDetails() { ManagerID = 13, ManagerName = "13 Name", ManagerMobile = "123456" };

        var detail7 = new EmployeeDetails() { ManagerID = 11, ManagerName = "11 Name", ManagerMobile = "123456" };
        var detail8 = new EmployeeDetails() { ManagerID = 12, ManagerName = "12 Name", ManagerMobile = "123456" };
        var detail9 = new EmployeeDetails() { ManagerID = 13, ManagerName = "13 Name", ManagerMobile = "123456" };

        var details1 = new List<EmployeeDetails>();
        details1.Add(detail1);
        details1.Add(detail2);
        details1.Add(detail3);

        var details2 = new List<EmployeeDetails>() { detail4, detail5, detail6 };
        var details3 = new List<EmployeeDetails>() { detail7, detail8, detail9 };

        Employees = new List<Employee>();
        Employees.Add(new Employee() { ID = 1, Name = "Name1", Details = details1 });
        Employees.Add(new Employee() { ID = 2, Name = "Name2", Details = details2 });
        Employees.Add(new Employee() { ID = 3, Name = "Name3", Details = details3 });            

        SelectedEmployee = Employees[1];

        this.DataContext = this;
    }

    public List<Employee> Employees { get; set; }

    private Employee _selected;

    public Employee SelectedEmployee
    {
        get { return _selected; }
        set { _selected = value; }
    }


}

public class Employee
{
    public int ID { get; set; }
    public string Name { get; set; }
    public List<EmployeeDetails> Details { get; set; }
}

public class EmployeeDetails
{
    public int ManagerID { get; set; }
    public string ManagerName { get; set; }
    public string ManagerMobile { get; set; }

}

【讨论】:

  • 非常感谢。有时你只需要有人指出你很愚蠢。但是,如果我还没有正确的方法,它会解决我的问题。好答案!
猜你喜欢
  • 2014-05-24
  • 1970-01-01
  • 2020-04-25
  • 1970-01-01
  • 2011-03-06
  • 2019-06-06
  • 2013-03-12
  • 2017-12-16
  • 2012-03-29
相关资源
最近更新 更多