数据绑定¶
继承的 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 属性生成列。
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 生成。要防止为业务对象的特定属性生成列,请将
Browsable或Display(AutoGenerateField)属性应用于源属性。有关详细信息,请参阅以下主题:Columns。 -
手动创建网格列。
手动创建列¶
您可以在 DataGridControl.Columns 集合中手动创建列(绑定或未绑定)。数据 Grid control 中的列由 GridColumn 类封装。创建 column 时,初始化 GridColumn.FieldName 属性以将 column 绑定到绑定数据源中的 public 属性/字段。
将 DataGridControl.AutoGenerateColumns、option 至 false 设置为仅显示已创建的列,并防止自动生成其他列。
有关详细信息,请参阅 Columns 和 Unbound Columns 主题。
示例 - 绑定 DataGrid 并手动生成列¶
下面的代码在 DataGridControl.Columns 集合中创建三列。对于“HIRE DATE”column,DateEditor in-place 编辑器用于显示 column 的值。
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— 所有列自动生成完成后触发。
另请参阅¶
* 本页面使用机器翻译技术翻译。

