- WPF 教程
- WPF - 首页
- WPF - 概述
- WPF - 环境设置
- WPF - Hello World
- WPF - XAML 概述
- WPF - 元素树
- WPF - 依赖属性
- WPF - 路由事件
- WPF - 控件
- WPF - 布局
- WPF - 布局嵌套
- WPF - 输入
- WPF - 命令行
- WPF - 数据绑定
- WPF - 资源
- WPF - 模板
- WPF - 样式
- WPF - 触发器
- WPF - 调试
- WPF - 自定义控件
- WPF - 异常处理
- WPF - 本地化
- WPF - 交互
- WPF - 2D 图形
- WPF - 3D 图形
- WPF - 多媒体
- WPF 有用资源
- WPF - 快速指南
- WPF - 有用资源
- WPF - 讨论
WPF - 数据网格
DataGrid 是一种以可自定义网格显示数据的控件。它提供了一种灵活的方式,可以以行和列的形式显示数据集合。DataGrid 类的层次继承如下:
DataGrid 的常用属性
序号 | 属性和描述 |
---|---|
1 | AlternatingRowBackground 获取或设置用于交替行的背景画笔。 |
2 | AreRowDetailsFrozen 获取或设置一个值,该值指示行详细信息是否可以水平滚动。 |
3 | AutoGenerateColumns 获取或设置一个值,该值指示列是否自动创建。 |
4 | CanUserAddRows 获取或设置一个值,该值指示用户是否可以向 DataGrid 添加新行。 |
5 | CanUserDeleteRows 获取或设置一个值,该值指示用户是否可以从 DataGrid 删除行。 |
6 | CanUserReorderColumns 获取或设置一个值,该值指示用户是否可以通过鼠标拖动列标题来更改列显示顺序。 |
7 | CanUserResizeColumns 获取或设置一个值,该值指示用户是否可以使用鼠标调整列的宽度。 |
8 | CanUserResizeRows 获取或设置一个值,该值指示用户是否可以使用鼠标调整行的高度。 |
9 | CanUserSortColumns 获取或设置一个值,该值指示用户是否可以通过单击列标题来排序列。 |
10 | ColumnHeaderHeight 获取或设置列标题行的高度。 |
11 | ColumnHeaderStyle 获取或设置应用于 DataGrid 中所有列标题的样式。 |
12 | Columns 获取包含 DataGrid 中所有列的集合。 |
13 | ColumnWidth 获取或设置 DataGrid 中列和标题的标准宽度和大小调整模式。 |
14 | CurrentCell 获取或设置具有焦点的单元格。 |
15 | CurrentColumn 获取或设置包含当前单元格的列。 |
16 | CurrentItem 获取绑定到包含当前单元格的行的数据项。 |
17 | FrozenColumnCount 获取或设置非滚动列的数量。 |
18 | HorizontalScrollBarVisibility 获取或设置一个值,该值指示如何在 DataGrid 中显示水平滚动条。 |
19 | IsReadOnly 获取或设置一个值,该值指示用户是否可以编辑 DataGrid 中的值。 |
20 | RowBackground 获取或设置行背景的默认画笔。 |
21 | RowHeight 获取或设置所有行的建议高度。 |
22 | SelectedCells 获取当前选定的单元格列表。 |
DataGrid 的常用方法
序号 | 方法和描述 |
---|---|
1 | BeginEdit 调用 BeginEdit 命令,该命令将把当前单元格或行置于编辑模式。 |
2 | CancelEdit 为当前处于编辑模式的单元格或行调用 CancelEditCommand 命令。 |
3 | ClearDetailsVisibilityForItem 清除代表指定数据项的 DataGridRow 的 DetailsVisibility 属性。 |
4 | ColumnFromDisplayIndex 获取指定索引处的 DataGridColumn。 |
5 | CommitEdit 为当前处于编辑模式的单元格或行调用 CommitEditCommand 命令。 |
6 | GenerateColumns 为对象的指定属性生成列。 |
7 | GetDetailsVisibilityForItem 获取代表指定数据项的 DataGridRow 的 DetailsVisibility 属性。 |
8 | OnApplyTemplate 在派生类中重写时,每当应用程序代码或内部进程调用 ApplyTemplate 时都会调用。(重写 FrameworkElement.OnApplyTemplate()。) |
9 | ScrollIntoView 垂直滚动 DataGrid 以显示指定数据项的行。 |
10 | SelectAllCells 选择 DataGrid 中的所有单元格。 |
11 | SetDetailsVisibilityForItem 设置包含指定对象的 DataGridRow 的 DetailsVisibility 属性的值。 |
12 | UnselectAllCells 取消选择 DataGrid 中的所有单元格。 |
DataGrid 的常用事件
序号 | 事件和描述 |
---|---|
1 | AddingNewItem 在将新项添加到 DataGrid 之前发生。 |
2 | AutoGeneratedColumns 所有列的自动生成完成后发生。 |
3 | AutoGeneratingColumn 自动生成单个列时发生。 |
4 | BeginningEdit 行或单元格进入编辑模式之前发生。 |
5 | CellEditEnding 在提交或取消单元格编辑之前发生。 |
6 | ColumnDisplayIndexChanged 当其中一列的 DisplayIndex 属性更改时发生。 |
7 | ColumnHeaderDragCompleted 用户使用鼠标拖动列标题后释放列标题时发生。 |
8 | ColumnHeaderDragDelta 用户拖动列标题时鼠标位置每次更改时都会发生。 |
9 | ColumnHeaderDragStarted 用户开始使用鼠标拖动列标题时发生。 |
10 | ColumnReordered 列移动到显示顺序中的新位置时发生。 |
11 | ColumnReordering 列移动到显示顺序中的新位置之前发生。 |
12 | CopyingRowClipboardContent 准备默认行内容后发生。 |
13 | CurrentCellChanged CurrentCell 属性的值更改时发生。 |
14 | InitializingNewItem 创建新项时发生。 |
15 | LoadingRow 在实例化 DataGridRow 后发生,以便您可以在使用它之前对其进行自定义。 |
16 | LoadingRowDetails 将新的行详细信息模板应用于行时发生。 |
17 | PreparingCellForEdit 单元格进入编辑模式时发生。 |
18 | RowDetailsVisibilityChanged 行详细信息元素的可见性更改时发生。 |
19 | RowEditEnding 在提交或取消行编辑之前发生。 |
20 | SelectedCellsChanged SelectedCells 集合更改时发生。 |
21 | Sorting 正在排序列时发生。 |
22 | UnloadingRow DataGridRow 对象可供重用时发生。 |
23 | UnloadingRowDetails 行详细信息元素可供重用时发生。 |
示例
让我们创建一个名为 WPFDataGridControl 的新 WPF 项目。
从工具箱中拖动数据网格。
以下示例演示如何在 DataGrid 中显示数据。下面是创建了两个数据网格以及一组属性和事件的 XAML 代码。
<Window x:Class = "WPFDataGridControl.MainWindow" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:core = "clr-namespace:System;assembly = mscorlib" xmlns:local = "clr-namespace:WPFDataGridControl" Title = "MainWindow" Height = "350" Width = "525"> <Window.Resources> <ObjectDataProvider x:Key = "myEnum" MethodName = "GetValues" ObjectType = "{x:Type core:Enum}"> <ObjectDataProvider.MethodParameters> <x:TypeExtension Type = "local:Party" /> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> </Window.Resources> <Grid> <DataGrid Name = "dataGrid" AlternatingRowBackground = "LightBlue" AlternationCount = "2" AutoGenerateColumns = "False"> <DataGrid.Columns> <DataGridTextColumn Header = "Name" Binding = "{Binding Name}" /> <DataGridTextColumn Header = "Title" Binding = "{Binding Title}" /> <DataGridCheckBoxColumn Header = "ReElected?" Binding = "{Binding WasReElected}"/> <DataGridComboBoxColumn Header = "Party" SelectedItemBinding = "{Binding Affiliation}" ItemsSource = "{Binding Source = {StaticResource myEnum}}" /> </DataGrid.Columns> </DataGrid> </Grid> </Window>
以下是C# 实现,用于两个不同的类。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WPFDataGridControl { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); dataGrid.ItemsSource = Employee.GetEmployees(); } } public enum Party { Indepentent, Federalist, DemocratRepublican, } public class Employee : INotifyPropertyChanged { private string name; public string Name { get { return name; } set { name = value; RaiseProperChanged(); } } private string title; public string Title { get { return title; } set { title = value; RaiseProperChanged(); } } private bool wasReElected; public bool WasReElected { get { return wasReElected; } set { wasReElected = value; RaiseProperChanged(); } } private Party affiliation; public Party Affiliation { get { return affiliation; } set { affiliation = value; RaiseProperChanged(); } } public static ObservableCollection<Employee> GetEmployees() { var employees = new ObservableCollection<Employee>(); employees.Add(new Employee() { Name = "Ali", Title = "Minister", WasReElected = true, Affiliation = Party.Indepentent }); employees.Add(new Employee() { Name = "Ahmed", Title = "CM", WasReElected = false, Affiliation = Party.Federalist }); employees.Add(new Employee() { Name = "Amjad", Title = "PM", WasReElected = true, Affiliation = Party.DemocratRepublican }); employees.Add(new Employee() { Name = "Waqas", Title = "Minister", WasReElected = false, Affiliation = Party.Indepentent }); employees.Add(new Employee() { Name = "Bilal", Title = "Minister", WasReElected = true, Affiliation = Party.Federalist }); employees.Add(new Employee() { Name = "Waqar", Title = "Minister", WasReElected = false, Affiliation = Party.DemocratRepublican }); return employees; } public event PropertyChangedEventHandler PropertyChanged; private void RaiseProperChanged([CallerMemberName] string caller = "") { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(caller)); } } } }
编译并执行上述代码后,将生成以下窗口。
我们建议您执行上述示例代码,并尝试 DataGrid 的其他一些属性和事件。