Object->DispatcherObject->DependencyObject->Visual->UIElement->FrameworkElement->Control->ItemsControl->Selector->MultiSelector->DataGrid
ItemsControl
Selector
MultiSelector
为允许选择多项的控件提供抽象类。
从 MultiSelector 类派生类时,请将 CanSelectMultipleItems 属性设置为 true
,以允许在控件中进行多选。
名称 | 备注 | 权限 |
---|---|---|
获取或设置一个值,该值指示是否可以一次选择 MultiSelector 中的多个项。 | get; set; | |
获取一个值,该值指示 MultiSelector 当前是否正在对 SelectedItems 集合执行批量更新。 | get; | |
获取在 MultiSelector 中选定的项。 | get; |
名称 | 备注 | 权限 |
---|---|---|
启动新的选择事务。 | protected | |
将所选项提交到 MultiSelector。 | protected | |
选择 MultiSelector 中的所有项。 | public | |
取消选择 MultiSelector 中的所有项。 | public |
DataGrid
表示用于在可自定义的网格中显示数据的控件。
DataGrid控件提供了一种灵活的方式来显示行和列中的数据集合。 DataGrid包括内置列类型和用于承载自定义内容的模板列。 内置行类型包括下拉详细信息部分,可用于显示单元值下面的附加内容。
若要将绑定 DataGrid 到数据,请将 ItemsSource 属性设置为 IEnumerable 实现。 DataGrid中的每一行都绑定到数据源中的某个对象,DataGrid中的每一列都绑定到该数据对象的属性。 为了使 DataGrid 用户界面在源数据中添加或删除项时自动更新, DataGrid 必须将绑定到实现接口的集合 INotifyCollectionChanged ,例如 ObservableCollection<T> 。 若要自动反映属性更改,源集合中的对象必须实现 INotifyPropertyChanged 接口。 有关详细信息,请参阅 (WPF) 的数据绑定 。
Columns
默认情况下,当您设置ItemsSource属性时,DataGrid控件会自动生成列。生成的列的类型取决于列中的数据类型。下表列出了生成的列类型。
Generated Column Type | Data Type |
---|---|
DataGridTextColumn | String |
DataGridCheckBoxColumn | Boolean |
DataGridComboBoxColumn | Enum |
DataGridHyperlinkColumn | Uri |
下图显示了每个列类型。
自动生成列后,可以处理AutoGeneratingColumn事件以自定义或取消将列添加到DataGrid之前。如果将用户定义的列和自动生成的列都添加到DataGrid,则会首先添加用户定义的列。要重新排列列的显示顺序,可以为单个列设置DisplayIndex属性。
您可以通过将AutoGenerateColumns属性设置为false
来防止自动生成列。如果要显式创建和配置所有列,这将很有用。
如果内置列类型不满足您的需求,请使用DataGridTemplateColumn类型定义自定义列。该DataGridTemplateColumn类型提供CellTemplate和CellEditingTemplate属性,使您可以指定显示和编辑模式的内容模板。例如,您可以为日期定义一个自定义列。所述CellTemplate可以定义一个的TextBlock以显示日期,而CellEditingTemplate可以定义一个的DatePicker控制到编辑的日期。
您可以使用Columns集合在运行时以编程方式添加,插入,删除和更改控件中的任何列。检查IsAutoGenerated属性,以确定列是自动生成的还是用户定义的。当ItemsSource更改时,将自动添加,删除或重新生成自动生成的列。
Selection
默认情况下,当用户单击DataGrid中的单元格时,将选择整行,并且用户可以选择多行。您可以设置SelectionUnit属性,以指定用户可以选择单元格,全行还是同时选择两者。设置SelectionMode属性以指定是选择多行还是单元格,还是仅选择单行或单元格。
您可以获取有关从SelectedCells属性中选择的单元格的信息。您可以在SelectedCellsChanged事件的SelectedCellsChangedEventArgs中获取有关其选择已更改的单元格的信息。调用SelectAllCells或UnselectAllCells方法以编程方式选择或取消选择所有单元格。有关更多信息,请参见DataGrid控件中的默认键盘和鼠标行为。
Grouping, Sorting, and Filtering
默认情况下,您可以通过单击列标题来对DataGrid中的项目进行排序。您可以通过处理Sorting事件来自定义排序。若要取消默认排序,请将Handled属性设置为true
。您也可以先对源数据进行排序,然后再将其显示在DataGrid中。
在DataGrid里要分组,排序,在和过滤数据,您绑定DataGrid到ICollectionView实现支持这些操作。然后,您可以在collection view上执行操作。在DataGrid中对项目进行分组时,可以定义一个GroupStyle来指定每个组的外观。您可以通过将GroupStyle添加到DataGrid的GroupStyle集合中来应用它。如果您有多个分组级别,则可以对每个分组级别应用不同的样式。样式按照定义的顺序应用。有关更多信息,请参见如何:在DataGrid控件中对数据进行分组,排序和过滤。
Editing
默认情况下,您可以直接在DataGrid中编辑项目。为了保证可以正确提交和取消编辑,DataGrid中的对象必须实现IEditableObject接口。或您可以将IsReadOnly属性设置为true,
禁用DataGrid中的编辑。
对 DataGrid 以下编辑命令提供内置支持:
Command | 默认输入绑定 |
---|---|
BeginEditCommand | F2 |
CancelEditCommand | ESC |
CommitEditCommand | Enter |
DeleteCommand | DELETE |
您可以通过单击或按F2将当前单元格置于编辑模式。当您移至同一行中的另一个单元格或在单元格处于编辑模式时按ENTER时,将提交单元格级别的编辑。当您移至另一行或在该行处于编辑模式时按ENTER时,将提交该行中的所有编辑。您可以通过按一次ESC取消单元格编辑,并通过两次按ESC取消连续的所有编辑。有关以编程方式提交和取消编辑的更多信息,请参见BeginEdit,CommitEdit和CancelEdit方法。有关与编辑相关的事件的更多信息,请参见BeginningEdit,PreparingCellForEdit,CellEditEnding和RowEditEnding。
设置CanUserAddRows和CanUserDeleteRows属性以指定用户是否可以添加或删除行。用户可以通过按DELETE键删除选定的行。如果CanUserAddRows属性设置为true
,则将新的项目行添加为DataGrid的最后一行。您可以通过处理InitializingNewItem事件为新项目设置默认值。
Note
是否允许编辑操作受多种其他因素的影响,包括DataGrid的IsReadOnly和IsEnabled状态,以及基础数据收集是否允许该操作。
Validation
通过DataGrid,您可以在单元格和行级别上执行验证。使用单元级验证,您可以在用户更新值时验证绑定数据对象的各个属性。使用行级验证,您可以在用户将更改提交到行时验证整个数据对象。您可以通过设置RowValidationErrorTemplate属性为行级验证错误提供自定义的视觉反馈,也可以使用默认错误指示符。若要创建自定义验证规则,请创建一个从ValidationRule类派生的类并实现Validate方法。将自定义验证规则添加到RowValidationRules集合。
自定义DataGrid控件
DataGrid控件支持公用表格式设置选项,如交替行背景和显示或隐藏标题、网格线和滚动条的功能。 此外,控件提供了若干样式和模板属性,您可以使用这些属性来完全更改控件及其行、列、标题和单元格的外观。
若要自定义 DataGrid 行为,可处理选定内容更改、单元格编辑和列重新排序的事件。 DataGrid还公开了若干行回收事件,您可以处理这些事件来自定义行。
若要对多个 DataGrid 控件应用相同的属性设置,请使用 Style 属性。 您可以修改ControlTemplate 默认值 ,为控件指定独特的外观。 有关创建 ControlTemplate 的详细信息,请参阅 通过创建 System.windows.controls.controltemplate> 自定义现有控件的外观。 若要查看特定于 DataGrid 的部分和状态,请参阅 DataGrid 样式和模板。
此控件的依赖属性可能由控件的默认样式设置。 如果按默认样式设置属性,则当控件出现在应用程序中时,属性可能会更改为默认值。 默认样式取决于应用程序运行时使用的桌面主题。 有关详细信息,请参阅 默认的 WPF 主题。
Common Tasks
下表提供了有关通常与相关联的任务的信息 DataGrid 。
名称 | 备注 | 权限 |
---|---|---|
AlternatingRowBackgroundProperty | 标识 AlternatingRowBackground 依赖项属性。 | public static readonly |
AreRowDetailsFrozenProperty | 标识 AreRowDetailsFrozen 依赖项属性。 | public static readonly |
AutoGenerateColumnsProperty | 标识 AutoGenerateColumns 依赖项属性。 | public static readonly |
BeginEditCommand | 表示命令,该命令指示开始编辑 DataGrid 的当前单元格或行的意图。 | public static readonly |
CancelEditCommand | 表示命令,该命令指示取消对当前单元格或行所做的任何挂起更改,并还原为执行 BeginEditCommand 命令前的状态的意图。 | public static readonly |
CanUserAddRowsProperty | 标识 CanUserAddRows 依赖项属性。 | public static readonly |
CanUserDeleteRowsProperty | 标识 CanUserDeleteRows 依赖项属性。 | public static readonly |
CanUserReorderColumnsProperty | 标识 CanUserReorderColumns 依赖项属性。 | public static readonly |
CanUserResizeColumnsProperty | 标识 CanUserResizeColumns 依赖项属性。 | public static readonly |
CanUserResizeRowsProperty | 标识 CanUserResizeRows 依赖项属性。 | public static readonly |
CanUserSortColumnsProperty | 标识 CanUserSortColumns 依赖项属性。 | public static readonly |
CellsPanelHorizontalOffsetProperty | 标识 CellsPanelHorizontalOffset 依赖项属性。 | public static readonly |
CellStyleProperty | 标识 CellStyle 依赖项属性。 | public static readonly |
ClipboardCopyModeProperty | 标识 ClipboardCopyMode 依赖项属性。 | public static readonly |
ColumnHeaderHeightProperty | 标识 ColumnHeaderHeight 依赖项属性。 | public static readonly |
ColumnHeaderStyleProperty | 标识 ColumnHeaderStyle 依赖项属性。 | public static readonly |
ColumnWidthProperty | 标识 ColumnWidth 依赖项属性。 | public static readonly |
CommitEditCommand | 表示命令,该命令指示提交对当前单元格或行所做的挂起更改并退出编辑模式的意图。 | public static readonly |
CurrentCellProperty | 标识 CurrentCell 依赖项属性。 | public static readonly |
CurrentColumnProperty | 标识 CurrentColumn 依赖项属性。 | public static readonly |
CurrentItemProperty | 标识 CurrentItem 依赖项属性。 | public static readonly |
DragIndicatorStyleProperty | 标识 DragIndicatorStyle 依赖项属性。 | public static readonly |
DropLocationIndicatorStyleProperty | 标识 DropLocationIndicatorStyle 依赖项属性。 | public static readonly |
EnableColumnVirtualizationProperty | 标识 EnableColumnVirtualization 依赖项属性。 | public static readonly |
EnableRowVirtualizationProperty | 标识 EnableRowVirtualization 依赖项属性。 | public static readonly |
FrozenColumnCountProperty | 标识 FrozenColumnCount 依赖项属性。 | public static readonly |
GridLinesVisibilityProperty | 标识 GridLinesVisibility 依赖项属性。 | public static readonly |
HeadersVisibilityProperty | 标识 HeadersVisibility 依赖项属性。 | public static readonly |
HorizontalGridLinesBrushProperty | 标识 HorizontalGridLinesBrush 依赖项属性。 | public static readonly |
HorizontalScrollBarVisibilityProperty | 标识 HorizontalScrollBarVisibility 依赖项属性。 | public static readonly |
IsReadOnlyProperty | 标识 IsReadOnly 依赖项属性。 | public static readonly |
MaxColumnWidthProperty | 标识 MaxColumnWidth 依赖项属性。 | public static readonly |
MinColumnWidthProperty | 标识 MinColumnWidth 依赖项属性。 | public static readonly |
MinRowHeightProperty | 标识 MinRowHeight 依赖项属性。 | public static readonly |
NewItemMarginProperty | 标识 NewItemMargin 依赖项属性。 | public static readonly |
NonFrozenColumnsViewportHorizontalOffsetProperty | 标识 NonFrozenColumnsViewportHorizontalOffset 依赖项属性。 | public static readonly |
RowBackgroundProperty | 标识 RowBackground 依赖项属性。 | public static readonly |
RowDetailsTemplateProperty | 标识 RowDetailsTemplate 依赖项属性。 | public static readonly |
RowDetailsTemplateSelectorProperty | 标识 RowDetailsTemplateSelector 依赖项属性。 | public static readonly |
RowDetailsVisibilityModeProperty | 标识 RowDetailsVisibilityMode 依赖项属性。 | public static readonly |
RowHeaderActualWidthProperty | 标识 RowHeaderActualWidth 依赖项属性。 | public static readonly |
RowHeaderStyleProperty | 标识 RowHeaderStyle 依赖项属性。 | public static readonly |
RowHeaderTemplateProperty | 标识 RowHeaderTemplate 依赖项属性。 | public static readonly |
RowHeaderTemplateSelectorProperty | 标识 RowHeaderTemplateSelector 依赖项属性。 | public static readonly |
RowHeaderWidthProperty | 标识 RowHeaderWidth 依赖项属性。 | public static readonly |
RowHeightProperty | 标识 RowHeight 依赖项属性。 | public static readonly |
RowStyleProperty | 标识 RowStyle 依赖项属性。 | public static readonly |
RowStyleSelectorProperty | 标识 RowStyleSelector 依赖项属性。 | public static readonly |
RowValidationErrorTemplateProperty | 标识 RowValidationErrorTemplate 依赖项属性。 | public static readonly |
SelectionModeProperty | 标识 SelectionMode 依赖项属性。 | public static readonly |
SelectionUnitProperty | 标识 SelectionUnit 依赖项属性。 | public static readonly |
VerticalGridLinesBrushProperty | 标识 VerticalGridLinesBrush 依赖项属性。 | public static readonly |
VerticalScrollBarVisibilityProperty | 标识 VerticalScrollBarVisibility 依赖项属性。 | public static readonly |
名称 | 备注 | 权限 |
---|---|---|
AlternatingRowBackground | 获取或设置在可选行上使用的背景画笔。 | get; set; |
AreRowDetailsFrozen | 获取或设置一个值,该值指示是否能水平滚动行详细信息。 | get; set; |
AutoGenerateColumns | 获取或设置一个值,该值指示是否自动创建列。 | get; set; |
CanUserAddRows | 获取或设置一个值,该值指示用户是否可在 DataGrid 中添加新行。 | get; set; |
CanUserDeleteRows | 获取或设置一个值,该值指示用户是否可从 DataGrid 中删除行。 | get; set; |
CanUserReorderColumns | 获取或设置一个值,该值指示用户能否通过用鼠标拖动列标题来更改列的显示顺序。 | get; set; |
CanUserResizeColumns | 获取或设置一个值,该值指示用户是否可使用鼠标调整列宽。 | get; set; |
CanUserResizeRows | 获取或设置一个值,该值指示用户是否能使用鼠标调整行的高度。 | get; set; |
获取或设置一个值,该值指示用户能否通过单击列标题对列进行排序。 | get; set; | |
CellsPanelHorizontalOffset | 获取 DataGridCellsPanel 的水平偏移量。 | get; |
CellStyle | 获取或设置应用于 DataGrid 中的所有单元格的样式。 | get; set; |
ClipboardCopyMode | 获取或设置一个值,该值指示如何将内容复制到剪贴板。 | get; set; |
ColumnHeaderHeight | 获取或设置列标题行的高度。 | get; set; |
ColumnHeaderStyle | 获取或设置应用于 DataGrid 中所有列标题的样式。 | get; set; |
Columns | 获取一个集合,该集合包含 DataGrid 中的所有列。 | get; |
ColumnWidth | 获取或设置 DataGrid 中列和标题的标准宽度和大小调整模式。 | get; set; |
CurrentCell | 获取或设置具有焦点的单元格。 | get; set; |
CurrentColumn | 获取或设置包含当前单元格的列。 | get; set; |
CurrentItem | 获取与包含当前单元格的行绑定的数据项。 | get; |
DeleteCommand | 表示命令,该命令指示删除当前行的意图。 | get; |
DragIndicatorStyle | 获取或设置在呈现拖动列标题时显示的拖动指示器时使用的样式。 | get; set; |
DropLocationIndicatorStyle | 获取或设置在拖动列标题时应用以指示放置位置的样式。 | get; set; |
EnableColumnVirtualization | 获取或设置一个值,该值指示是否启用列虚拟化。 | get; set; |
EnableRowVirtualization | 获取或设置一个值,该值指示是否启用行虚拟化。 | get; set; |
FocusBorderBrushKey | 获取用于引用带焦点单元格的默认边框画笔的键。 | get; |
FrozenColumnCount | 获取或设置非滚动列的数目。 | get; set; |
GridLinesVisibility | 获取或设置一个值,该值指示显示哪些网格线。 | get; set; |
HandlesScrolling | 获取一个值,该值指示 DataGrid 是否支持自定义键盘滚动。 | get; |
HeadersVisibility | 获取或设置用于指定行和列标题可见性的值。 | get; set; |
HeadersVisibilityConverter | 获取用于将 DataGridHeadersVisibility 转换为 Visibility 的转换器。 | get; |
HorizontalGridLinesBrush | 获取或设置用于绘制水平网格线的画笔。 | get; set; |
HorizontalScrollBarVisibility | 获取或设置一个指示如何在 DataGrid 中显示水平滚动条的值。 | get; set; |
IsReadOnly | 获取或设置一个值,该值指示用户是否可在 DataGrid 中的编辑值。 | get; set; |
MaxColumnWidth | 获取或设置 DataGrid 中列和标题的最大宽度约束。 | get; set; |
MinColumnWidth | 获取或设置 DataGrid 中列和标题的最小宽度约束。 | get; set; |
MinRowHeight | 获取或设置 DataGrid 中行和标题的最小高度约束。 | get; set; |
NewItemMargin | 获取或设置新项行的边距。 | get; set; |
NonFrozenColumnsViewportHorizontalOffset | 获取视区中可滚动列的水平偏移量。 | get; |
RowBackground | 获取或设置行背景的默认画笔。 | get; set; |
RowDetailsScrollingConverter | 获取用于将布尔值转换为 SelectiveScrollingOrientation 的转换器。 | get; |
RowDetailsTemplate | 获取或设置用于显示行详细信息的模板。 | get; set; |
RowDetailsTemplateSelector | 获取或设置用于行详细信息的模板选择器。 | get; set; |
RowDetailsVisibilityMode | 获取或设置一个值,该值指示何时显示行的详细信息部分。 | get; set; |
RowHeaderActualWidth | 获取行标题列的呈现宽度。 | get; |
RowHeaderStyle | 获取或设置应用于所有行标题的样式。 | get; set; |
RowHeaderTemplate | 获取或设置行标题的模板。 | get; set; |
RowHeaderTemplateSelector | 获取或设置行标题的模板选择器。 | get; set; |
RowHeaderWidth | 获取或设置行标题列的宽度。 | get; set; |
RowHeight | 获取或设置所有行的建议高度。 | get; set; |
RowStyle | 获取或设置应用于所有行的样式。 | get; set; |
RowStyleSelector | 获取或设置行的样式选择器。 | get; set; |
RowValidationErrorTemplate | 获取或设置用来以可视方式指示行验证中的错误的模板。 | get; set; |
RowValidationRules | 获取用于验证每个行中的数据的规则。 | get; |
SelectAllCommand | 表示命令,该命令指示在 DataGrid 中选择所有单元格的意图。 | get; |
SelectedCells | 获取当前选定单元格的列表。 | get; |
SelectionMode | 获取或设置一个值,该值指示如何在 DataGrid 中选择行和单元格。 | get; set; |
SelectionUnit | 获取或设置一个值,该值指示是否可以在 DataGrid 中选择行、单元格或两者。 | get; set; |
VerticalGridLinesBrush | 获取或设置用于绘制垂直网格线的画笔。 | get; set; |
VerticalScrollBarVisibility | 获取或设置一个指示如何在 DataGrid 中显示垂直滚动条的值。 | get; set; |
名称 | 备注 | 权限 |
---|---|---|
BeginEdit | 调用 BeginEdit() 命令,该命令将当前单元格或行置于编辑模式。 | public |
CancelEdit | 为当前处于编辑模式的单元格或行调用 CancelEditCommand 命令。 | public |
ClearContainerForItemOverride | 为指定项卸载行。 | protected |
ClearDetailsVisibilityForItem | 清除表示所指定数据项的 DetailsVisibility 的 DataGridRow 属性。 | public |
ColumnFromDisplayIndex | 获取位于指定索引处的 DataGridColumn。 | public |
CommitEdit | 为当前处于编辑模式的单元格或行调用 CommitEditCommand 命令。 | public |
GenerateColumns | 生成对象指定属性的列。 | public |
GetContainerForItemOverride | 实例化一个新的 DataGridRow。 | protected |
GetDetailsVisibilityForItem | 获取表示指定的数据项的 DetailsVisibility 的 DataGridRow 属性。 | public |
IsItemItsOwnContainerOverride | 确定项是否为 DataGridRow。 | protected |
MeasureOverride | 确定 DataGrid 的所需大小。 | protected |
OnAddingNewItem | 引发 AddingNewItem 事件。 | protected |
OnApplyTemplate | 每次应用程序代码或内部进程调用 ApplyTemplate() 时,都将调用此方法。 | protected |
OnAutoGeneratedColumns | 引发 AutoGeneratedColumns 事件。 | protected |
OnAutoGeneratingColumn | 引发 AutoGeneratingColumn 事件。 | protected |
OnBeginningEdit | 引发 BeginningEdit 事件。 | protected |
OnCanExecuteBeginEdit | 为与 CanExecute 命令关联的 BeginEditCommand 事件提供处理。 | protected |
OnCanExecuteCancelEdit | 为与 CanExecute 命令关联的 CancelEditCommand 事件提供处理。 | protected |
OnCanExecuteCommitEdit | 为与 CanExecute 命令关联的 CommitEditCommand 事件提供处理。 | protected |
OnCanExecuteCopy | 为与 CanExecute 命令关联的 Copy 事件提供处理。 | protected |
OnCanExecuteDelete | 为与 CanExecute 命令关联的 DeleteCommand 事件提供处理。 | protected |
OnCellEditEnding | 引发 CellEditEnding 事件。 | protected |
OnColumnDisplayIndexChanged | 引发 ColumnDisplayIndexChanged 事件。 | protected |
OnColumnHeaderDragCompleted | 引发 ColumnHeaderDragCompleted 事件。 | protected |
OnColumnHeaderDragDelta | 引发 ColumnHeaderDragDelta 事件。 | protected |
OnColumnHeaderDragStarted | 引发 ColumnHeaderDragStarted 事件。 | protected |
OnColumnReordered | 引发 ColumnReordered 事件。 | protected |
OnColumnReordering | 引发 ColumnReordering 事件。 | protected |
OnContextMenuOpening | 如果单元格上下文菜单已打开,则选择该单元格。 | protected |
OnCopyingRowClipboardContent | 引发 CopyingRowClipboardContent 事件。 | protected |
OnCreateAutomationPeer | 返回此 DataGrid 的自动化对等方。 | protected |
OnCurrentCellChanged | 引发 CurrentCellChanged 事件。 | protected |
OnExecutedBeginEdit | 为与 Executed 命令关联的 BeginEditCommand 事件提供处理。 | protected |
OnExecutedCancelEdit | 为与 Executed 命令关联的 CancelEditCommand 事件提供处理。 | protected |
OnExecutedCommitEdit | 为与 Executed 命令关联的 CommitEditCommand 事件提供处理。 | protected |
OnExecutedCopy | 为与 Executed 命令关联的 Copy 事件提供处理。 | protected |
OnExecutedDelete | 为与 Executed 命令关联的 DeleteCommand 事件提供处理。 | protected |
OnInitializingNewItem | 引发 InitializingNewItem 事件。 | protected |
OnIsMouseCapturedChanged | 在此元素的 IsMouseCaptured 属性更改时调用。 | protected |
OnItemsChanged | 当项更改时执行列的自动生成并更新验证标志。 | protected |
OnItemsSourceChanged | 当 ItemsSource 属性更改时调用。 | protected |
OnKeyDown | 在接收到 KeyDown 事件时调用。 | protected |
OnLoadingRow | 引发 LoadingRow 事件。 | protected |
OnLoadingRowDetails | 引发 LoadingRowDetails 事件。 | protected |
OnMouseMove | 更新由于用户在 DataGrid 中拖动鼠标而选定的项的集合。 | protected |
OnPreparingCellForEdit | 引发 PreparingCellForEdit 事件。 | protected |
OnRowDetailsVisibilityChanged | 引发 RowDetailsVisibilityChanged 事件。 | protected |
OnRowEditEnding | 引发 RowEditEnding 事件。 | protected |
OnSelectedCellsChanged | 引发 SelectedCellsChanged 事件。 | protected |
OnSelectionChanged | 当选择更改时调用。 | protected |
OnSorting | 引发 Sorting 事件。 | protected |
OnTemplateChanged | 每当 DataGrid 的模板发生更改时调用。 | protected |
OnTextInput | 提供用于 TextInput 路由事件的类处理。 | protected |
OnUnloadingRow | 引发 UnloadingRow 事件。 | protected |
OnUnloadingRowDetails | 引发 UnloadingRowDetails 事件。 | protected |
PrepareContainerForItemOverride | 为指定项准备新行。 | protected |
ScrollIntoView | 将 DataGrid 垂直和水平滚动,以显示指定项。 | public |
SelectAllCells | 选择 DataGrid 中的所有单元格。 | public |
SetDetailsVisibilityForItem | 为包含指定对象的 DetailsVisibility 设置 DataGridRow 属性的值。 | public |
UnselectAllCells | 取消选择 DataGrid 中的所有单元格。 | public |
名称 | 备注 |
---|---|
AddingNewItem | 在将项添加到 DataGrid 前发生。 |
AutoGeneratedColumns | 在完成所有列的自动生成操作时发生。 |
AutoGeneratingColumn | 在自动生成了单独的列时发生。 |
BeginningEdit | 在行或单元格进入编辑模式之前发生。 |
CellEditEnding | 在提交或取消单元格编辑之前发生。 |
ColumnDisplayIndexChanged | 在某一列的 DisplayIndex 属性更改时发生。 |
ColumnHeaderDragCompleted | 在用户使用鼠标拖动列标题后释放列标题时发生。 |
ColumnHeaderDragDelta | 每次当鼠标位置在用户拖动列标题时发生更改时发生。 |
ColumnHeaderDragStarted | 在用户使用鼠标开始拖动列标题时发生。 |
ColumnReordered | 在列移至显示顺序中的新位置时发生。 |
ColumnReordering | 在列移至显示顺序中的新位置之前发生。 |
CopyingRowClipboardContent | 在默认行内容准备好之后发生。 |
CurrentCellChanged | 在 CurrentCell 属性的值更改后发生。 |
InitializingNewItem | 在创建新项时发生。 |
LoadingRow | 当实例化 DataGridRow 之后发生,以便您可以在使用它之前先进行自定义。 |
LoadingRowDetails | 当新的行详细信息模板应用到行时发生。 |
PreparingCellForEdit | 在单元格进入编辑模式时发生。 |
RowDetailsVisibilityChanged | 在行详细信息元素的可见性更改时发生。 |
RowEditEnding | 在提交或取消行编辑之前发生。 |
SelectedCellsChanged | 当 SelectedCells 集合更改时发生。 |
Sorting | 对列进行排序时发生。 |
UnloadingRow | 当 DataGridRow 对象变得可供重用时发生。 |
UnloadingRowDetails | 当行详细信息元素变得可供重用时发生。 |
XAML代码
<Window x:Class="DataGridDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:DataGridDemo"
xmlns:core="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="1200">
<Window.Resources>
<!--Create list of enumeration values-->
<ObjectDataProvider x:Key="myEnum" MethodName="GetValues" ObjectType="{x:Type core:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type Type="local:OrderStatus"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<!--Create an instance of the converter for Email-->
<local:EmailConverter x:Key="EmailConverter" />
</Window.Resources>
<DataGrid AlternatingRowBackground="LightBlue" AreRowDetailsFrozen="False" AutoGenerateColumns="True" CanUserAddRows="True" CanUserDeleteRows="True" CanUserReorderColumns="True"
CanUserResizeColumns="True" CanUserResizeRows="True" CanUserSortColumns="True" ClipboardCopyMode="ExcludeHeader" ColumnHeaderHeight="NaN"
ColumnWidth="SizeToHeader" EnableColumnVirtualization="False" EnableRowVirtualization="True" GridLinesVisibility="All" HeadersVisibility="All" HorizontalGridLinesBrush="Red" HorizontalScrollBarVisibility="Auto"
IsReadOnly="False" MaxColumnWidth="Infinity" MinColumnWidth="20" MinRowHeight="0.0" RowBackground="LightGreen" RowDetailsVisibilityMode="VisibleWhenSelected"
RowHeight="NaN" SelectionMode="Extended" SelectionUnit="FullRow" VerticalGridLinesBrush="Pink" VerticalScrollBarVisibility="Auto" ItemsSource="{Binding}" Name="DG1">
<DataGrid.Columns>
<DataGridTextColumn Header="First Name" Binding="{Binding FirstName}"/>
<DataGridTextColumn Header="Last Name" Binding="{Binding LastName}" />
<!--The Email property contains a URI. For example "mailto:lucy0@adventure-works.com"-->
<DataGridHyperlinkColumn Header="Email" Binding="{Binding Email}" ContentBinding="{Binding Email, Converter={StaticResource EmailConverter}}" />
<DataGridCheckBoxColumn Header="Member?" Binding="{Binding IsMember}" />
<DataGridComboBoxColumn Header="Order Status" SelectedItemBinding="{Binding Status}" ItemsSource="{Binding Source={StaticResource myEnum}}" />
</DataGrid.Columns>
</DataGrid>
</Window>
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;
using System.Data;
using System.Collections.ObjectModel;
using System.Diagnostics;
namespace DataGridDemo
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
//GetData() creates a collection of Customer data from a database
ObservableCollection<Customer> custdata = GetData();
//Bind the DataGrid to the customer data
DG1.DataContext = custdata;
}
private ObservableCollection<Customer> GetData()
{
ObservableCollection<Customer> custdata = new ObservableCollection<Customer>();
for (int i = 1; i < 6; i++)
{
custdata.Add( new Customer());
custdata[i - 1].FirstName = "FirstName" + i;
custdata[i - 1].LastName = "LastName" + i;
custdata[i - 1].Email = new Uri("mailto:mail"+i+"@adventure-works.com");
custdata[i - 1].IsMember = (i%2==0);
custdata[i - 1].Status = (OrderStatus)(i-1);
}
return custdata;
}
//Defines the customer object
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public Uri Email { get; set; }
public bool IsMember { get; set; }
public OrderStatus Status { get; set; }
}
}
public enum OrderStatus { None, New, Processing, Shipped, Received };
//Converts the mailto uri to a string with just the customer alias
public class EmailConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null)
{
string email = value.ToString();
int index = email.IndexOf("@");
string alias = email.Substring(7, index - 7);
return alias;
}
else
{
string email = "";
return email;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Uri email = new Uri((string)value);
return email;
}
}
}