【问题标题】:Display object property in DataTable column of type custom Class在自定义类类型的 DataTable 列中显示对象属性
【发布时间】:2014-08-12 07:09:21
【问题描述】:

我有一个 DataTable,它由字符串类型的列和 Node 类的自定义对象组成

public class Node
{
    public string Name { get; set; }
    public int Id { get; set; }

    public Node(string name, int id)
    {
        Name = name;
        Id = id;
    }

}

 <DataGrid Name="data1" AutoGenerateColumns="True" ItemsSource="{Binding MyDataTable}" />

问题是我将 DataTable 绑定到 Datagrid。列节点下的所有条目都显示为完整的类名。我想显示 Node 的 Name 属性。

【问题讨论】:

    标签: c# wpf data-binding datagrid datatable


    【解决方案1】:

    有两种方法可以实现:

    简单的方法是重写 Node 类的 ToString() 方法并从中返回 Name 属性。

    public class Node
    {
       ....
       public override string ToString()
       {
          return Name;
       }
    }
    

    您必须在 dataGrid 上将 AutoGenerateColumns 设置为 False 并提供您自己的列集。

    <DataGrid Name="data1" AutoGenerateColumns="False"
              ItemsSource="{Binding MyDataTable}">
       <DataGrid.Columns>
          ..... // Other columns will go here.
         <DataGridTextColumn Binding="{Binding Node.Name}"/>
       </DataGrid.Columns>
    </DataGrid>
    

    【讨论】:

    • 谢谢,但假设我的类属性是布尔类型,在这种情况下,我想显示一个选中的列。知道我该怎么做。
    • 是的,第二个选项是一种方法。你可以使用&lt;DataGridCheckBoxColumn/&gt;
    • 但我不知道我的 DataTable 列,它们是在运行时添加的,同时填充了 dataTable。
    • 等一下,dataGrid 已经够聪明了。如果列类型为布尔型,它会自动为您生成 DataGridCheckBoxColumn。你不必担心这个。
    • 对不起,如果我的问题不清楚,如果我的列类型是具有布尔类型属性的类怎么办。那我应该如何在 XAML 中绑定它。我无法在我的 xaml 中添加列,因为我不知道所有列将在那里。在将 AutoGenerateColumns 设置为 False 后,我得到了空网格
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多