WPF - 数据网格



DataGrid 是一种以可自定义网格显示数据的控件。它提供了一种灵活的方式,可以以行和列的形式显示数据集合。DataGrid 类的层次继承如下:

Hierarchical of 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)); 
         } 
      } 
	
   } 
	
}

编译并执行上述代码后,将生成以下窗口。

Output of Datagrid

我们建议您执行上述示例代码,并尝试 DataGrid 的其他一些属性和事件。

wpf_controls.htm
广告