跳转至

数据绑定

通过继承的 DataControlBase.ItemsSource 属性,可以将 Data Grid 绑定到数据源(例如业务对象的集合)。绑定后,控件会从数据源中检索项,并将其显示为行。

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

您还可以创建未绑定列(也称为计算列),用于显示(或编辑并显示)数据源中不存在的值。

自动生成列

启用 DataGridControl.AutoGenerateColumns 选项后,在运行时初始化 Data Grid 时会自动为数据源的所有属性/字段生成列。如果禁用了 AutoGenerateColumns 选项,可以通过 PopulateColumns 方法在代码中调用自动生成列。

自动生成列时,Data Grid 控件会触发两个事件,您可以处理这些事件来取消生成列或自定义列设置:

示例 - 绑定 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 中显示特定的一组字段/属性,可以执行以下任一操作:

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

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

  • 手动创建网格列。

手动创建列

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

将 DataGridControl.AutoGenerateColumns 选项设置为 false,可以仅显示已创建的列,并阻止自动生成其他列。

有关详细信息,请参阅列和未绑定列主题。

示例 - 绑定 DataGrid 并手动创建列

以下代码在 DataGridControl.Columns 集合中创建三列。对于“HIRE DATE”列,使用 DateEditor 就地编辑器显示该列的值。

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

属性

方法

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

事件

另请参阅



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