跳转至

数据绑定

继承的 DataControlBase.ItemsSource 属性允许您将 Data Grid 绑定到数据源(例如,业务对象的集合)。绑定后,control 从数据源检索项目并将其呈现为 rows

Data Grid 将数据源字段(业务对象的属性)显示为 columns。如果未创建 column,则行不显示任何数据。 链接到现有数据源字段的列称为绑定列。它们的 GridColumn.FieldName 属性设置为数据源中存在的字段名称。

您还可以创建 unbound columns(也称为计算列)来显示(或编辑和显示)数据源中不存在的值。

自动生成列

启用 DataGridControl.AutoGenerateColumns option 在运行时初始化 Data Grid 时自动为所有数据源属性/字段生成列。如果禁用 AutoGenerateColumns option,则 PopulateColumns method 允许您从代码调用自动 column 生成。

自动生成 column 时,数据 Grid control 会触发两个事件,您可以处理这两个事件来取消 column 生成并自定义 column 设置:

  • DataGridControl.AutoGeneratingColumn — 当 column 即将添加到 DataGridControl.Columns 集合时触发。使用此事件可防止将 column 添加到网格,或自定义 column 的设置。
  • DataGridControl.AutoGeneratedColumns — 所有列自动生成完成后触发。

示例-绑定DataGrid并自动生成列

以下代码将 Data Grid 绑定到 EmployeeInfo 对象的集合,并使 AutoGenerateColumns 属性能够自动为 EmployeeInfo 类公开的所有 public 属性生成列。

datagrid-binding-autogeneratecolumns-example

xmlns:mxdg="https://schemas.eremexcontrols.net/avalonia/datagrid"
...
<mxdg:DataGridControl x:Name="dataGrid" ItemsSource="{Binding Employees}" 
 AutoGenerateColumns="True" BorderThickness="1,1">
</mxdg:DataGridControl>
public partial class MainViewModel : ViewModelBase
{
    [ObservableProperty]
    IList<EmployeeInfo> employees;

    public MainViewModel()
    {
        //Generate sample data.
        Employees = EmployeesData.GenerateEmployeeInfo();
    }
}

public class EmployeeInfo
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime BirthDate { get; set; }
    public DateTime HiredAt { get; set; }
    public int Experience { get; set; }
    public string Position { get; set; }
    public EmploymentType EmploymentType { get; set; }
    public bool Married { get; set; }
    public string City { get; set; }
    public string Phone { get; set; }
}

显示 Data Grid 中的一组特定列

如果您需要显示 Data Grid 中的特定 set of 字段/属性,您可以执行以下操作之一:

  • 自动生成列,然后从 DataGridControl.Columns 集合中手动访问和删除不需要的列。您还可以使用 GridColumn.IsVisible 选项隐藏不必要的列。

  • 在数据源级别隐藏特定属性,然后使用自动 column 生成。要防止为业务对象的特定属性生成列,请将 BrowsableDisplay(AutoGenerateField) 属性应用于源属性。有关详细信息,请参阅以下主题:Columns

  • 手动创建网格列。

手动创建列

您可以在 DataGridControl.Columns 集合中手动创建列(绑定或未绑定)。数据 Grid control 中的列由 GridColumn 类封装。创建 column 时,初始化 GridColumn.FieldName 属性以将 column 绑定到绑定数据源中的 public 属性/字段。

DataGridControl.AutoGenerateColumns、option 至 false 设置为仅显示已创建的列,并防止自动生成其他列。

有关详细信息,请参阅 ColumnsUnbound Columns 主题。

示例 - 绑定 DataGrid 并手动生成列

下面的代码在 DataGridControl.Columns 集合中创建三列。对于“HIRE DATE”column,DateEditor in-place 编辑器用于显示 column 的值。

datagrid-binding-createcolumnsmanually-example

xmlns:mxdg="https://schemas.eremexcontrols.net/avalonia/datagrid"
xmlns:mxe="https://schemas.eremexcontrols.net/avalonia/editors"
...
<mxdg:DataGridControl x:Name="dataGrid" ItemsSource="{Binding Employees}" 
 AutoGenerateColumns="False" BorderThickness="1,1">
    <mxdg:GridColumn FieldName="FirstName" Width="*" MinWidth="80"/>
    <mxdg:GridColumn FieldName="LastName" Width="*" MinWidth="80"/>
    <mxdg:GridColumn FieldName="HiredAt" Header="Hire Date" Width="*" MinWidth="80">
        <mxdg:GridColumn.EditorProperties>
            <mxe:DateEditorProperties/>
        </mxdg:GridColumn.EditorProperties>
    </mxdg:GridColumn>
</mxdg:DataGridControl>
public partial class MainViewModel : ViewModelBase
{
    [ObservableProperty]
    IList<EmployeeInfo> employees;

    public MainViewModel()
    {
        Employees = EmployeesData.GenerateEmployeeInfo();
    }
}
public class EmployeeInfo
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime BirthDate { get; set; }
    public DateTime HiredAt { get; set; }
    public int Experience { get; set; }
    public string Position { get; set; }
    public EmploymentType EmploymentType { get; set; }
    public bool Married { get; set; }
    public string City { get; set; }
    public string Phone { get; set; }
}

相关API

特性

  • DataGridControl.Columns — 网格列的集合。
  • DataGridControl.AutoGenerateColumns — 指定 Data Grid 是否自动为数据源在运行时公开的 public 属性/字段生成列。
  • GridColumn.FieldName — 指定 column 绑定到的字段/属性的名称。

方法

  • PopulateColumns — 为绑定数据源公开的 public 字段/属性生成列。

活动

  • DataGridControl.AutoGeneratingColumn — 当 column 即将添加到 DataGridControl.Columns 集合时触发。使用此事件可防止将 column 添加到网格,或自定义 column 的设置。
  • DataGridControl.AutoGeneratedColumns — 所有列自动生成完成后触发。

另请参阅



* 本页面使用机器翻译技术翻译。