WPF基础五:UI④ 条目控件DataGrid

Object->DispatcherObject->DependencyObject->Visual->UIElement->FrameworkElement->Control->ItemsControl->Selector->MultiSelector->DataGrid


ItemsControl

《WPF基础五:UI④ 条目控件ContextMenu》


Selector

WPF基础五:UI④ 条目控件ComboBox


MultiSelector

为允许选择多项的控件提供抽象类。

从 MultiSelector 类派生类时,请将 CanSelectMultipleItems 属性设置为 true ,以允许在控件中进行多选。

名称备注权限

CanSelectMultipleItems

获取或设置一个值,该值指示是否可以一次选择 MultiSelector 中的多个项。get; set;

IsUpdatingSelectedItems

获取一个值,该值指示 MultiSelector 当前是否正在对 SelectedItems 集合执行批量更新。get;

SelectedItems

获取在 MultiSelector 中选定的项。get;
名称备注权限

BeginUpdateSelectedItems

启动新的选择事务。protected

EndUpdateSelectedItems

将所选项提交到 MultiSelectorprotected

SelectAll

选择 MultiSelector 中的所有项。public

UnselectAll

取消选择 MultiSelector 中的所有项。public

DataGrid

表示用于在可自定义的网格中显示数据的控件。

DataGrid控件提供了一种灵活的方式来显示行和列中的数据集合。 DataGrid包括内置列类型和用于承载自定义内容的模板列。 内置行类型包括下拉详细信息部分,可用于显示单元值下面的附加内容。

若要将绑定 DataGrid 到数据,请将 ItemsSource 属性设置为 IEnumerable 实现。 DataGrid中的每一行都绑定到数据源中的某个对象,DataGrid中的每一列都绑定到该数据对象的属性。 为了使 DataGrid 用户界面在源数据中添加或删除项时自动更新, DataGrid 必须将绑定到实现接口的集合 INotifyCollectionChanged ,例如 ObservableCollection<T> 。 若要自动反映属性更改,源集合中的对象必须实现 INotifyPropertyChanged 接口。 有关详细信息,请参阅 (WPF) 的数据绑定 

 

Columns

默认情况下,当您设置ItemsSource属性时,DataGrid控件会自动生成列。生成的列的类型取决于列中的数据类型。下表列出了生成的列类型。

 
Generated Column TypeData Type
DataGridTextColumnString
DataGridCheckBoxColumnBoolean
DataGridComboBoxColumnEnum
DataGridHyperlinkColumnUri

 

下图显示了每个列类型。

具有全部四种默认列类型的数据网格

自动生成列后,可以处理AutoGeneratingColumn事件以自定义或取消将列添加到DataGrid之前。如果将用户定义的列和自动生成的列都添加到DataGrid,则会首先添加用户定义的列。要重新排列列的显示顺序,可以为单个列设置DisplayIndex属性。

您可以通过将AutoGenerateColumns属性设置为false来防止自动生成列。如果要显式创建和配置所有列,这将很有用。

如果内置列类型不满足您的需求,请使用DataGridTemplateColumn类型定义自定义列。该DataGridTemplateColumn类型提供CellTemplateCellEditingTemplate属性,使您可以指定显示和编辑模式的内容模板。例如,您可以为日期定义一个自定义列。所述CellTemplate可以定义一个的TextBlock以显示日期,而CellEditingTemplate可以定义一个的DatePicker控制到编辑的日期。

您可以使用Columns集合在运行时以编程方式添加,插入,删除和更改控件中的任何列。检查IsAutoGenerated属性,以确定列是自动生成的还是用户定义的。当ItemsSource更改时,将自动添加,删除或重新生成自动生成的列。

Selection

默认情况下,当用户单击DataGrid中的单元格时,将选择整行,并且用户可以选择多行。您可以设置SelectionUnit属性,以指定用户可以选择单元格,全行还是同时选择两者。设置SelectionMode属性以指定是选择多行还是单元格,还是仅选择单行或单元格。

您可以获取有关从SelectedCells属性中选择的单元格的信息。您可以在SelectedCellsChanged事件的SelectedCellsChangedEventArgs中获取有关其选择已更改的单元格的信息。调用SelectAllCellsUnselectAllCells方法以编程方式选择或取消选择所有单元格。有关更多信息,请参见DataGrid控件中的默认键盘和鼠标行为

Grouping, Sorting, and Filtering

默认情况下,您可以通过单击列标题来对DataGrid中的项目进行排序。您可以通过处理Sorting事件来自定义排序。若要取消默认排序,请将Handled属性设置为true。您也可以先对源数据进行排序,然后再将其显示在DataGrid中

DataGrid里要分组,排序,在和过滤数据,您绑定DataGridICollectionView实现支持这些操作。然后,您可以在collection view上执行操作。在DataGrid中对项目进行分组时,可以定义一个GroupStyle来指定每个组的外观。您可以通过将GroupStyle添加到DataGridGroupStyle集合中来应用它。如果您有多个分组级别,则可以对每个分组级别应用不同的样式。样式按照定义的顺序应用。有关更多信息,请参见如何:在DataGrid控件中对数据进行分组,排序和过滤

Editing

默认情况下,您可以直接在DataGrid中编辑项目。为了保证可以正确提交和取消编辑,DataGrid中的对象必须实现IEditableObject接口。或您可以将IsReadOnly属性设置为true,禁用DataGrid中的编辑。

对 DataGrid 以下编辑命令提供内置支持:

正在编辑
Command默认输入绑定
BeginEditCommandF2
CancelEditCommandESC
CommitEditCommandEnter
DeleteCommandDELETE

您可以通过单击或按F2将当前单元格置于编辑模式。当您移至同一行中的另一个单元格或在单元格处于编辑模式时按ENTER时,将提交单元格级别的编辑。当您移至另一行或在该行处于编辑模式时按ENTER时,将提交该行中的所有编辑。您可以通过按一次ESC取消单元格编辑,并通过两次按ESC取消连续的所有编辑。有关以编程方式提交和取消编辑的更多信息,请参见BeginEditCommitEditCancelEdit方法。有关与编辑相关的事件的更多信息,请参见BeginningEditPreparingCellForEditCellEditEndingRowEditEnding

设置CanUserAddRowsCanUserDeleteRows属性以指定用户是否可以添加或删除行。用户可以通过按DELETE键删除选定的行。如果CanUserAddRows属性设置为true,则将新的项目行添加为DataGrid的最后一行。您可以通过处理InitializingNewItem事件为新项目设置默认值。

Note

是否允许编辑操作受多种其他因素的影响,包括DataGridIsReadOnlyIsEnabled状态,以及基础数据收集是否允许该操作。

Validation

通过DataGrid,您可以在单元格和行级别上执行验证。使用单元级验证,您可以在用户更新值时验证绑定数据对象的各个属性。使用行级验证,您可以在用户将更改提交到行时验证整个数据对象。您可以通过设置RowValidationErrorTemplate属性为行级验证错误提供自定义的视觉反馈,也可以使用默认错误指示符。若要创建自定义验证规则,请创建一个从ValidationRule类派生的类并实现Validate方法。将自定义验证规则添加到RowValidationRules集合。

自定义DataGrid控件

DataGrid控件支持公用表格式设置选项,如交替行背景和显示或隐藏标题、网格线和滚动条的功能。 此外,控件提供了若干样式和模板属性,您可以使用这些属性来完全更改控件及其行、列、标题和单元格的外观。

若要自定义 DataGrid 行为,可处理选定内容更改、单元格编辑和列重新排序的事件。 DataGrid还公开了若干行回收事件,您可以处理这些事件来自定义行。

若要对多个 DataGrid 控件应用相同的属性设置,请使用 Style 属性。 您可以修改ControlTemplate 默认值 ,为控件指定独特的外观。 有关创建 ControlTemplate 的详细信息,请参阅 通过创建 System.windows.controls.controltemplate> 自定义现有控件的外观。 若要查看特定于 DataGrid 的部分和状态,请参阅 DataGrid 样式和模板

此控件的依赖属性可能由控件的默认样式设置。 如果按默认样式设置属性,则当控件出现在应用程序中时,属性可能会更改为默认值。 默认样式取决于应用程序运行时使用的桌面主题。 有关详细信息,请参阅 默认的 WPF 主题

Common Tasks

下表提供了有关通常与相关联的任务的信息 DataGrid 。

常见任务
任务实现
设置交替行背景色将 AlternationIndex 属性设置为2或更大,然后将分配给 Brush RowBackground 和 AlternatingRowBackground 属性。
定义单元格和行选择行为设置 SelectionMode 和 SelectionUnit 属性。
自定义标题、单元和行的视觉外观将新的应用于 Style ColumnHeaderStyle 、 RowHeaderStyle 、 CellStyle 或 RowStyle 属性。
设置大小调整选项设置 Height 、、 MaxHeight 、 MinHeight Width 、 MaxWidth 或 MinWidth 属性。 有关详细信息,请参阅 DataGrid 控件中的调整大小选项
访问选定项检查 SelectedCells 属性以获取选定的单元格,并选中 SelectedItems 属性以获取选定的行。 有关更多信息,请参见 SelectedCells 属性。
自定义最终用户交互设置 CanUserAddRows 、、 CanUserDeleteRows 、 CanUserReorderColumns CanUserResizeColumns 、 CanUserResizeRows 和 CanUserSortColumns 属性。
取消或更改自动生成的列处理 AutoGeneratingColumn 事件。
冻结列将 FrozenColumnCount 属性设置为1,并将该属性设置为0,将该列移到最左侧的位置 DisplayIndex 。
使用 XML 数据作为数据源将 ItemsSource 上的绑定 DataGrid 到表示项集合的 XPath 查询。 在中创建每个列 DataGrid 。 绑定每一列,方法是将绑定上的 XPath 设置为可获取项源属性的查询。 有关示例,请参见 DataGridTextColumn
将项分组绑定到 CollectionView CollectionViewSource 支持分组的或。 有关详细信息,请参阅 如何:在 DataGrid 控件中对数据进行分组、排序和筛选
显示行的详细信息部分定义 RowDetailsTemplate 以指定详细信息部分的外观。 设置 RowDetailsVisibilityMode 以指定显示详细信息部分的时间。 有关详细信息,请参阅 如何:向 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;

CanUserSortColumns

获取或设置一个值,该值指示用户能否通过单击列标题对列进行排序。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获取位于指定索引处的 DataGridColumnpublic
CommitEdit为当前处于编辑模式的单元格或行调用 CommitEditCommand 命令。public
GenerateColumns生成对象指定属性的列。public
GetContainerForItemOverride实例化一个新的 DataGridRowprotected
GetDetailsVisibilityForItem获取表示指定的数据项的 DetailsVisibility 的 DataGridRow 属性。public
IsItemItsOwnContainerOverride确定项是否为 DataGridRowprotected
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;
        }
    }

}

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值