当前位置:首页 >> 互联网 >>

ComponentOne DataGrid for WPF中文文档

DataGrid for WPF 帮助文档
1 WPF及Silverlight版DataGrid概述

1

通过WPF及Silverlight版的DataGrid,可以向您的WPF以及Silverlight应用程序提供高级的数据可视化支持。 支持强大的数据绑定的C1DataGrid控件使得在WPF以及Silverlight应用程序中显示,编辑,以及分析表格数据变得非常 容易。 WPF及Silverlight版DataGrid控件包括几个关键的特性,比如: 完全交互式Grid 通过创建一个完全交互式的Grid,提高最终用户体验。C1DataGrid有许多内置的交互功能,比如说改变列的宽 度,改变列顺序,编辑,排序,过滤,分组,冻结以及选择。查看运行时交互(1.4章节)以了解更多信息。 数据分组和汇总 C1DataGrid支持Outlook风格的分组。只需要简单地将一个列头拖到Grid上方的区域即可对数据进行分组。可扩 展和可折叠的节点将自动生成。您还可以在分组的Header行上显示聚合函数计算的结果或者总计数据。更多详 情,请参见对列进行分组(第1.3.13.2章节)。 类似Excel风格的过滤 默认情况下,C1DataGrid 支持Excel风格的过滤。这种类型的过滤功能在每一列上添加一个下拉菜单,允许用户 创建一个过滤条件。更多信息,请参见对列进行过滤(第1.3.11.2章节)。 高性能 C1DataGrid利用行和列的回收机制(UI虚拟化)以达到在处理大型数据集时最佳的性能。 几种内置的列类型 C1DataGrid提供了许多的内置的列编辑器,基本覆盖了全部常见的数据类型。内置的编辑器包含文本框,复选 框,日期选择器,组合框和图像。您也可以通过选择自定义栏目编辑包括掩码文本,超链接,多行文本和颜色选 择器。详情请参见列类型(第1.3.4章节)。 RowDetails 和Hierarchical 支持 DataGrid控件还支持一个RowDetails模版,用来在每一行的可折叠区域嵌入UIElement。例如,将另一个 DataGrid嵌入,您即可创建出一个主-从Grid,用来显示分级数据。更多信息,请参见添加Row Details。 顶部和底部行模板 通过C1DataGrid的顶部和底部行模版,您可以轻松地创建并向Grid添加自定义行。例如,你可以设计你自己的过 滤器或总计行并在模版内嵌入任何的UIElement。 多选模式 为最终用户提供了全部一下的单元格选择选项:单个单元格,单行,单列,单一范围,多行,多列,以及多个范 围。通过C1DataGrid的剪贴板支持,最终用户可以容易地将选中的单元格粘贴至任何的文本编辑器,比如说 Microsoft Excel。 添加新行 通过在Grid上方或下方显示一个空白的新行允许用户向C1DataGrid添加新行。详情请参见向Grid添加行(在线文 档)以及设置新建行的可见性(第1.3.18.3.3章节)。 自定义行和列 为您DataGrid中的行设计您自己的数据模版,并创建可以绑定到多个数据字段的组合列。 通过ClearStyle容易地改变颜色 C1DataGrid支持ComponentOne的新ClearStyle?技术,让你轻松改变控件的颜色而无须改变控件模板。只要设 置几个颜色属性,你可以快速的设置整个Grid的样式。有关详细信息,请参见C1DataGrid ClearStyle (第 1.3.18.5章节)。

1.1 WPF及Silverlight版DataGrid概述
入门
关于安装ComponentOne Studio WPF版许可,技术支持,命名空间,主题和本地化,以及通过控件创建一个工 程的更多信息,请访问WPF版本入门。 关于安装ComponentOne Studio Silverlight版许可,技术支持,命名空间,主题和本地化,以及通过控件创建 一个工程的更多信息,请访问Silverlight版本入门。

DataGrid for WPF 帮助文档
1.2 入门 1.2.1 快速入门

2

下面的快速入门指南的目的是让你熟悉并尝试运行WPF及Silverlight版本的控件。在这个快速入门中,您将从在Visual Studio中创建一个新的工程开始,并向您的应用程序添加C1DataGrid,之后添加一个数据源。然后,您将转到Microsoft Expression Blend中完成绑定grid至数据源的操作,自定义grid。最后运行该grid程序以观察运行时交互。

1.2.1.1 第一步:将C1DataGrid添加到您的工程
在这一步中,您会从使用WPF版本的DataGrid在Visual Studio中创建一个grid应用开始入手。当您添加了C1DataGrid控 件至您的应用程序,您将有一个完整的,功能性的grid。您可以进一步的为您的应用程序自定义grid。 为了设置您的工程并添加一个C1DataGrid控件至您的应用程序,请完成以下步骤: 1. 在Visual Studio中创建一个新的WPF项目。 2. 导航到工具箱,双击C1DataGrid 图标以添加grid控件至Window1。 3. 调整窗体的大小以及窗体内包含的C1DataGrid 的大小;调整完成之后应该如下图所示:

4. 通过设置Name属性给C1DataGrid控件命名为“ProductsDataGrid”。

您所完成的步骤 运行该应用程序,可以观察到grid应用程序的外观类似以下图像所示:

DataGrid for WPF 帮助文档

3

您已经成功地创建了一个非常基本的grid应用程序,但grid仍然还是是空白的。在下一步中,您将添加一个数据源到您 的项目,并将grid绑定到数据源。

1.2.1.2 第二步:创建数据模型
在最后一步中,您建立了grid应用程序,但基本的grid是功能性的,它不包含任何数据。在这一步中,您将添加一个数 据模型至您的项目,您将在稍后使用该数据模型以生成显示在C1DataGrid控件中的数据。 1. 2. 3. 4. 为了添加数据模型,须完成下列步骤: 右键单击项目节点并选择Add | Class…. 将该类命名为Product.cs并单击OK。 替换所生成的Product类的代码为以下: C# public class Product { static Random _rnd = new Random(); static string[] _names = "Macko|Surfair|Pocohey|Studeby".Split('|'); static string[] _lines = "Computers|Washers|Stoves|Cars".Split('|'); static string[] _colors = "Red|Green|Blue|White".Split('|'); public Product() { Name = _names[_rnd.Next() % _names.Length]; Line = _lines[_rnd.Next() % _lines.Length]; Color = _colors[_rnd.Next() % _colors.Length]; Price = 30 + _rnd.NextDouble() * 1000; Cost = 3 + _rnd.NextDouble() * 300; Discontinued = _rnd.NextDouble() < .2; Introduced = DateTime.Today.AddDays(_rnd.Next(-600, 0)); } public string Name { get; set; } public string Color { get; set; }

DataGrid for WPF 帮助文档
public public public public public } string Line { get; set; } double Price { get; set; } double Cost { get; set; } DateTime Introduced { get; set; } bool Discontinued { get; set; }

4

1.2.1.3 第三步:设置ItemsSource
在最后一个步骤中,您添加了一个数据模型叫做Product。在这一步,您将使用该模型生成一个数据对象的集合,并设 置该列表在C1DataGrid控件中显示。 为了在C1DataGrid控件中显示一个数据对象的集合,须完成以下步骤: 1. 打开MainWindow.cs或MainWindow.vb。 2. 在样板的初始化代码之后,添加以下的代码,生成一个100个随机产品对象的列表: C# List<Product> _products = new List<Product>(); for(int i = 0; i < 100; i++) { _products.Add(new Product()); } 3. 设置C1DataGrid 的ItemsSource 属性为该产品的集合。和之前完成的第一步中的操作一样,我们将C1DataGrid 控件命名为“ProductsDataGrid”。ProductsDataGrid.ItemsSource = _products. ProductsDataGrid.ItemsSource = _products.

1.2.2 类层次结构
下表总结了在C1DataGrid中所包含的重要的类型之间的关系: C1.WPF.DataGrid.C1DataGrid : System.Windows.Controls.Control 封装了大部分的grid功能。此组件将显示在Visual Studio的ToolBox上。 C1.WPF.DataGrid.DataGridColumn : System.Object 表示grid中的列。 C1.WPF.DataGridColumnCollection : System.Object 表示data grid中列的集合。 C1.WPF.DataGrid.DataGridColumnHeaderPresenter : System.Windows.Controls.Control 表示列头的Content控件;该控件包含排序,改变大小以及过滤元素。 C1.WPF.DataGrid.DataGridRow : System.Object 表示grid中的行。 C1.WPF.DataGridRowCollection : System.Object 行的集合。 C1.WPF.DataGrid.DataGridCell : System.Object 表示单个单元格。

1.2.3 在Expression Blend中创建一个C1DataGrid
为了在Expression Blend中创建一个C1DataGrid,须完成以下步骤:

DataGrid for WPF 帮助文档

5

1. 导航到Projects窗体,并右键单击工程文件列表上的Reference文件夹。在上下文菜单中选择添加引用,找到并 选中C1.WPF.DataGrid.dll程序集,之后单击打开。 该对话框将关闭,并且将引用添加到您的项目中,之后控件将在Assert库中出现。 2. 在工具箱中单击Asserts按钮(双V字型图标)以打开Asserts对话框。 3. 在Assert库对话框中,从位于左侧的面板上选择Controls项目,之后单击位于右侧的C1DataGrid图标。 C1DataGrid图标将出现在ToolBox上位于Asserts按钮下方的位置。 4. 在UserControl的设计区单击一次以选中该控件。和在Visual Studio中的操作方式不同,在Blend中您可以按照下 面的步骤直接添加WPF控件至设计器。 5. 双击位于工具箱中的C1DataGrid图标即可添加控件至面板。现在C1DataGrid已经添加至您的应用程序。 6. 如果您需要,可以选中该控件并在属性窗体内设置其属性,以自定义该控件。例如,设置C1DataGrid控件的 Name属性的值为“c1datagrid1”,同时设置Height属性为“180”,Width属性为“250”。

1.3 DataGrid 特性 1.3.1 添加新的行
您可以在运行时向grid中添加行,使用新行栏。新行栏,默认情况下位于grid的底部,使用星号(*)表示,允许您在运 行时通过向新行输入新的信息以添加新行至grid:

要添加一个新的行,只需在新行栏中键入文本:

按回车键结束文本编辑,并且将其添加到gird的新行:

注意:CanUserAddRows属性的值必须设置为True(默认值)以便使得运行时可以执行添加行操作。做为示例, 请参见禁用添加新行(第1.3.1.1章节)。

1.3.1.1 禁用添加新行

DataGrid for WPF 帮助文档

6

默认情况下,最终用户可以在运行时向grid添加新行以及新内容。一个新行栏将出现在grid的底部,最终用户可以在该 栏输入文本以添加新行至grid。更多信息,请参见在在grid中中添加行(联机文档)。如果需要,您可以通过设置 CanUserAddRows属性为False禁用运行时添加新行的功能。

在设计时
要禁用运行时添加行,须完成下列步骤: 1. 单击C1DataGrid控件以选中。 2. 导航到属性窗体并查找CanUserAddRows属性。 3. 清除位于CanUserAddRows属性右侧的复选框。

通过XAML
例如需要禁用运行时添加行功能,添加CanUserEditRows="False"至< c1:C1DataGrid>标签,使得其看起来如下面的代 码片段所示: <c1:C1DataGrid Name="c1datagrid1" Height="180" Width="250" CanUserAddRows="False" />

通过代码
例如,需要禁用运行时添加行功能,添加以下代码到您的工程: Visual Basic Me.C1DataGrid1.CanUserAddRows = False C# this.c1DataGrid1.CanUserAddRows = false;

您所完成的步骤
运行该应用程序,如果需要,滚动grid至最后一行。可以看到新行栏将不会显示在grid底部,因此最终用户无法在运行 时添加新行和内容至grid。有关单元格编辑的更多信息,请参见向grid添加行(在线文档)主题。

1.3.2 改变列和行的大小
默认情况下,用户可以在运行时改变grid中列和行的大小。更多信息,请参见调整列和行的大小(在线文档)。如果需 要,您也可以通过设置C1DataGrid.CanUserResizeColumns以及C1DataGrid.CanUserResizeRows属性为False以禁用运行 时改变行和列大小的功能。

在设计时
为禁用的列和行运行时调整大小,须完成以下步骤: 1. 2. 3. 4. 5. 单击C1DataGrid控件以选中。 在“属性”窗口中,找到CanUserResizeColumns属性。 清除和CanUserResizeColumns属性相邻的复选框。 在“属性”窗口中,找到CanUserResizeRows 属性。 清除和CanUserResizeRows 属性相邻的复选框。

DataGrid for WPF 帮助文档
通过XAML
例如,要禁用列和行运行时改变大小,添加CanUserResizeColumns="False" CanUserResizeRows="False"至 <c1:C1DataGrid>标签,使得XAML代码如下所示: <c1:C1DataGrid Name="c1datagrid1" Height="180" Width="250" CanUserResizeColumns="False" CanUserResizeRows="False"/>

7

通过代码
例如,要禁用列和行运行时改变大小,须将下面的代码添加到你的工程中: Visual Basic Me.C1DataGrid1.CanUserResizeColumns = False Me.C1DataGrid1.CanUserResizeRows = False

C# this.c1DataGrid1.CanUserResizeColumns = false; this.c1DataGrid1.CanUserResizeRows = false;

您所完成的步骤 运行该应用程序,可以观察到您将不再可以在运行时通过拖拽操作改变列宽或者行高。有关列重新排序的更多信息,请 参见调整列和行的大小(在线文档)主题。

1.3.3 列重新排序
最终用户可以很容易地在运行时对列进行重新排序。若要在运行时对列重新排序,须完成以下步骤: 1. 单击要排序的列的列头。 2. 将该列头拖拽到希望将要排序的目标位置。注意如果你可以将该列放置在该位置的话,会出现一条线:

3. 松开鼠标将此列放置在新位置以完成列的重排。 注意:CanUserReorderColumns属性的值必须设置为True(默认值),以便使得可以在运行时对列进行重排序。

1.3.4 列类型

DataGrid for WPF 帮助文档

8

WPF版DataGrid 提供了一种灵活的方式通过提供许多内置的列编辑器在行和列中显示一个数据的集合,这些内置的列 编辑器覆盖了全部的常见数据类型。内置的列类型包括: 列类型 DataGridBoundColumn DataGridTextColumn DataGridCheckBoxColumn 描述 可以绑定到grid数据源中某个属性的列。这是为绑定到未定义数据类型准备的默认列类 型。 文本列。这是绑定字符串数据的默认列类型。 一个复选框列。这是绑定布尔数据的默认列类型。

DataGridComboBoxColumn 组合框列。这是绑定枚举类型数据的默认列类型。 DataGridDateTimeColumn DataGridImageColumn DataGridNumericColumn DataGridTemplateColumn CustomColumns 日期时间列(见下图)。这是绑定日期/时间数据的默认列类型。 图像列。 数字列。这是绑定数值数据的默认列类型(格式将从该类型推断出来的。例如,如果类 型是int,格式将不包含小数位)。 一个模版列,用作托管自定义内容。 一个自定义列。参见C1DataGrid_Demo示例以查看自定义列的示例,包括一个组合列, 颜色列,GIF列,Hyperlink列,Masked Text列,多行文本列,等等。

这些列类型可以提供内置的输入验证;例如DataGridDateTimeColumn 列包括用于选择日期的日历:

1.3.5 自定义列 1.3.5.1 自定义列的单元格内容
在本章节中,您将可以找到关于当单元格不在编辑模式时,改变做为一列中单元格内容显示的UIElement的信息。 需要着重注意的是,做为单元格内容的UIElement将被data grid回收使用;这意味着该列有可能使用由其他列创建的 UIElement。 要实现自定义单元格内容,您需要重写以下方法: GetCellContentRecyclingKey: 用于存储共享池中未来重用的单元格内容的键。 返回相同的RecyclingKey的列将可以共享相同的单元格内容实例。 CreateCellContent: 创建将用于显示单元格中的信息的UIElement。 BindCellContent: 初始化单元格内容展示器。该方法必须设置cellContent属性,SetBinding关联到的依赖属性

DataGrid for WPF 帮助文档

9

是“row.DataItem”,该绑定源可以在绑定中直接设置或者默认的位于cellContent的DataContext。 UnbindCellContent: 该方法将在单元格内容即将被回收时调用。 在一个超链接列中,该方法的实现可能与以下示例相似:下面的方法中,此列返回不同的键(默认键是 typeof(TextBlock)),这意味着该列将不和其他的列共享单元格内容元素(除非另一列也返回相同的键值,但是 一般情况下,这种事情不会发生)。 Visual Basic Public Overloads Overrides Function GetCellContentRecyclingKey(ByVal row As DataGridRow) As Object Return (GetType(HyperlinkButton)) End Function

C# public override object GetCellContentRecyclingKey(DataGridRow row) { return typeof(HyperlinkButton); }

如果没有任何被回收的超链接,则data grid将调用CreateCellContent 方法。在这种情况下,将创建一个新的超级链 接,它将被使用在单元格中包含超链接的单元格中,该超链接将被保存并可以在未来的某个时刻可以被回收供别的单元 格使用: Visual Basic Public Overloads Overrides Function CreateCellContent(ByVal row As DataGridRow) As FrameworkElement Return New HyperlinkButton() End Function

C# public override FrameworkElement CreateCellContent(DataGridRow row) { return new HyperlinkButton(); }

在创建了新的超链接之后,或者使用了一个被回收的超链接对象,则data grid将调用BindCellContent 方法以便给超链 接传递参数。在这个方法中,您应该将超链接的属性设置为与单元格的数据绑定的属性: Visual Basic Public Overloads Overrides Sub BindCellContent(ByVal cellContent As FrameworkElement, ByVal row As DataGridRow) Dim hyperlink = DirectCast(cellContent, HyperlinkButton) If Binding IsNot Nothing Then Dim newBinding As Binding = CopyBinding(Binding) newBinding.Source = row.DataItem

DataGrid for WPF 帮助文档
hyperlink.SetBinding(HyperlinkButton.NavigateUriProperty, newBinding) End If hyperlink.HorizontalAlignment = HorizontalAlignment hyperlink.VerticalAlignment = VerticalAlignment End Sub C#

10

public override void BindCellContent(FrameworkElement cellContent, DataGridRow row) { var hyperlink = (HyperlinkButton)cellContent; if (Binding != null) { Binding newBinding = CopyBinding(Binding); newBinding.Source = row.DataItem; hyperlink.SetBinding(HyperlinkButton.NavigateUriProperty, newBinding); } hyperlink.HorizontalAlignment = HorizontalAlignment; hyperlink.VerticalAlignment = VerticalAlignment; } 请注意,您还可以将数据项设置为超链接的DataContext,而不是将其设置为绑定的源属性中的数据项。例如: Visual Basic Hyperlink.DataContext = row.DataItem C# Hyperlink.DataContext = row.DataItem;

虽然您最终获得了相同的执行结果,但是这种技术和直接设置绑定源的方式运作的方式是截然不同的。

1.3.6 自定义行 1.3.6.1 自定义行单元格内容
本主题说明如何自定义单元格内容。例如,假设你想建立一个过滤器行。你可以创建一个grid,第一行的每个单元格中 有一个文本框,当你在其中进行输入时,grid将按照输入的文本进行过滤,如下图所示:

添加一个类文件 您需要添加一个新的类文件,该文件将被用做添加自定义行。例如,完成下列步骤以添加新的类文件:

DataGrid for WPF 帮助文档
1. 2. 3. 4. 在解决方案资源管理器中,右键单击项目名称并选择Add|New Item。 在“添加新项目”对话框中选择“可用模板”列表中的类。 命名该类型,比如说“DataGridFilterRow”,并单击添加按钮以添加该类至工程。 更新该列的内容,使得其类似以下所示: Visual Basic Imports C1.WPF.DataGrid Public Class DataGridFilterRow Inherits DataGridRow End Class

11

C# using C1.WPF.DataGrid; public class DataGridFilterRow : DataGridRow { }

这将更新该类,使得其继承自DataGridRow。一旦该文件被创建它必须从DataGridRow继承。 一旦你添加了这个类,你可以用它来实现grid中的过滤。 重写一些方法 您需要重写一些方法,用来指定自定义行的单元格内容,这一过程和其他在自定义行中暴露的方法类似。要实现 自定义单元格内容,您需要重写以下方法: HasCellPresenter: 确定是否一个单元格出现在该行以及指定的列。 GetCellContentRecyclingKey: 用于存储共享池中未来重用的单元格内容的键。返回相同的RecyclingKey 行 可以共享相同的单元格内容的实例。 CreateCellContent: 创建将用于该列中的单元格中显示信息的UIElement。 BindCellContent: 初始化单元格内容展示器。 UnbindCellContent: 该方法将在单元格内容即将被回收时调用。 在过滤行中,HasCellPresenter方法将始终返回true,因为全部的列都将具有一个关联的单元格。在其他 情况下,如摘要行,只有具有聚合函数的列将有一个单元格。 GetCellContentRecyclingKey方法将返回typeof(TextBox),这将允许回收使用文本框对象,同时 CreateCellContent将产生一个此类型的实例。添加以下代码: Visual Basic Protected Overrides Function GetCellContentRecyclingKey(column As DataGridColumn) As Object Return GetType(TextBox) End Function Protected Overrides Function CreateCellContent(column As DataGridColumn) As FrameworkElement Return New TextBox() End Function C#

DataGrid for WPF 帮助文档
protected override object GetCellContentRecyclingKey(DataGridColumn column) { return typeof(TextBox); } protected override FrameworkElement CreateCellContent(DataGridColumn column) { return new TextBox(); }

12

实现过滤 在之前的步骤中,您为每一个单元格添加了一个文本框,但是这些控件目前什么都没有处理;为了实现过滤功能,须完 成以下步骤: 1. 将下面的代码添加到BindCellContent方法: Visual Basic Protected Overrides Sub BindCellContent(cellContent As FrameworkElement, column As DataGridColumn) Dim filterTextBox = DirectCast(cellContent, TextBox) '如果该列没有指定FilterMemberPath '则将不允许在文本框中输入文本; If String.IsNullOrEmpty(column.FilterMemberPath) Then filterTextBox.IsEnabled = False filterTextBox.Text = "Not available" Else filterTextBox.Text = "" filterTextBox.IsEnabled = True End If ' 处理TextChanged事件以应用过滤器至列。 filterTextBox.TextChanged += New EventHandler(Of TextChangedEventArgs) (filterTextBox_TextChanged) End Sub C# protected override void BindCellContent(FrameworkElement cellContent, DataGridColumn column) { var filterTextBox = (TextBox)cellContent; //如果该列没有指定FilterMemberPath //则将不允许在文本框中输入文本; if (string.IsNullOrEmpty(column.FilterMemberPath)) { filterTextBox.IsEnabled = false; filterTextBox.Text = "Not available"; } else { filterTextBox.Text = "";

DataGrid for WPF 帮助文档
filterTextBox.IsEnabled = true; } // 处理TextChanged事件以应用过滤器至列。 filterTextBox.TextChanged += new EventHandler<TextChangedEventArgs> (filterTextBox_TextChanged); } 2. 在UnbindCellContent方法中,您必须移除TextChanged事件处理,以避免内存泄露: Visual Basic

13

Protected Overrides Sub UnbindCellContent(cellContent As FrameworkElement, column As DataGridColumn) Dim filterTextBox = DirectCast(cellContent, C1SearchBox) filterTextBox.TextChanged -= New EventHandler(Of TextChangedEventArgs) (filterTextBox_TextChanged) End Sub C# protected override void UnbindCellContent(FrameworkElement cellContent, DataGridColumn column) { var filterTextBox = (C1SearchBox)cellContent; filterTextBox.TextChanged -= new EventHandler<TextChangedEventArgs> (filterTextBox_TextChanged); }

1.3.6.2 添加一个自定义行
您可以替换data grid中使用的用作展示每一个数据项数据或者分组的行,将其替换为自定义行,或者您可以在数据行的 顶部或者底部添加自定义行。 更换数据项行 为了替换由data grid生成的行,您必须添加一个事件处理函数至CreatingRow事件。 下面的代码将替换默认行为模板行: Visual Basic Private Sub C1DataGrid_CreatingRow(sender As Object, e As DataGridCreatingRowEventArgs) '检查是否是一个数据项行(它也可能是一个分组行)。 If e.Type = DataGridRowType.Item Then e.Row = New DataGridTemplateRow() With { _ .RowTemplate = DirectCast(Resources("TemplateRow"), DataTemplate) _ } End If End Sub

DataGrid for WPF 帮助文档
C#

14

private void C1DataGrid_CreatingRow(object sender, DataGridCreatingRowEventArgs e) { //检查是否是一个数据项行(它也可能是一个分组行)。 if (e.Type == DataGridRowType.Item) { e.Row = new DataGridTemplateRow() { RowTemplate = (DataTemplate)Resources["TemplateRow"] }; } } 添加一个额外行 WPF版DataGrid允许在数据的顶部或底部添加一行或多行。此功能用于新建行、总计行、摘要行和筛选器行的应用场 景。 例如,通过XAML或代码: XAML <c1:C1DataGrid> <c1:C1DataGrid.TopRows> < local:DataGridFilterRow /> </c1:C1DataGrid.TopRows> <c1:C1DataGrid.BottomRows> < local:DataGridFilterRow/> </c1:C1DataGrid.BottomRows> </c1:C1DataGrid> Visual Basic grid.Rows.TopRows.Add(New DataGridFilterRow()) C# grid.Rows.TopRows.Add(new DataGridFilterRow());

1.3.6.3 添加行细节
WPF版DataGrid中每一个grid行可以展开以显示一个行的细节区域。这个行的细节区域可以显示关于一个特定行内容的 更加详细的信息。行的细节区域由一个DataTemplate定义,RowDetailsTemplate指定该区域的外观以及需要显示的数 据。具体示例,请参见RowDetailsTemplate (第1.3.16.1章节)主题。 通过RowDetailsVisibilityMode属性,行细节区域可以为选中的行显示,为全部的行显示,或者可以收起。更多信息, 请参见设置行细节区域可见性(第1.3.18.3.5章节)。

1.3.7 数据绑定
C1DataGrid控件可以绑定到任何实现了System.Collections.IEnumerable接口的对象(比如说XmlDataProvider, ObjectDataProvider,DataSet,DataView,等等)。您可以使用C1DataGrid.ItemsSource属性绑定至C1DataGrid。

DataGrid for WPF 帮助文档

15

为绑定至grid,简单地设置ItemSource属性为一个实现了IEnumerable的实例。data grid中的每一行将绑定到数据源中 的一个对象,data grid的每一列将绑定到数据对象的某一个属性。 请注意,为了使得当数据源添加或者删除项目时,C1DataGrid用户界面可以自动更新,控件必须绑定到一个实现了 INotifyCollectionChanged的集合,比如说ObservableCollection<(Of <(T>)>)。 关于绑定一个C1DataGrid控件至一个XML数据源的步骤,请参见WPF版DataGrid快速入门。

1.3.8 延迟滚动
WPF及Silverlight版DataGrid同时支持实时滚动和延迟滚动。默认情况下,将使用实时滚动,当最终用户移动滚动滑块 或者单击滚动按钮时grid将立即滚动。延迟滚动模式下,grid将保持不动,直至用户释放了滚动条滑块时滚动到目标位 置;而在滑块移动过程中,grid将保持不动。如果grid包含大量数据,或者您需要优化滚动性能时,您可能需要在您的 应用程序中用到延迟滚动。 您可以通过设置ScrollMode属性决定grid将如何滚动。您可以设置ScrollMode属性为C1DataGridScrollMode 枚举值中 的一个,可以为RealTime(默认值),或者Differed。一下示例将grid设置为延迟滚动模式。 通过XAML 为了设置grid为延迟滚动模式,添加ScrollMode="Deferred" 至<c1:C1DataGrid> 标签,使其看起来类似以下代 码: <c1:C1DataGrid x:Name="c1DataGrid1" ScrollMode="Deferred"> 通过代码 为了设置grid为延迟滚动模式,设置ScrollMode属性的值为Deferred。例如: Visual Basic Me.C1DataGrid1.ScrollMode = C1DataGridScrollMode.Deferred

C# this.c1DataGrid1.ScrollMode = C1DataGridScrollMode.Deferred;

1.3.9 定义列
您可以使用WPF及Silverlight版DataGrid的Columns集合通过程序在运行时添加,插入,移除,以及改变任意列。您也可 以通过XAML指定列,同时可以选择自动生成或者不使用自动生成的列。 创建自己的列允许您使用额外的列类型,比如说DataGridTemplateColumn或者自定义列类型。 DataGridTemplateColumn类型提供了一种简单的方式创建一个简单的自定义列。CellTemplate以及CellEditingTemplate 属性允许您指定内容模版,包括显示以及编辑模式。

1.3.9.1 生成列
默认情况下,C1DataGrid将在您设置了ItemsSource属性之后,基于数据的类型,自动生成列。对于绑定的布尔值(或 者Nullable的布尔值),所生成的列为DataGridCheckBoxColumn类型,而对于绑定的字符串类型的值,所生成的列类 型为DataGridTextColumn, 对于枚举类型的值,生成的列类型为DataGridComboBoxColumn,对于绑定的未定义数据类型,将显示为一个 DataGridBoundColumn类型的列。如果一个属性不具有字符串或者数值类型的值类型,所生成的文本框列将是只读 的,显示该数据对象的ToString结果的值。 你可以通过设置AutoGenerateColumns属性为false来阻止自动生成列。如果您希望显式地创建并定义全部的列,这将会

DataGrid for WPF 帮助文档

16

非常有用。在或者,您可以让data grid自动生成列,但是处理AutoGeneratingColumn事件,以便在列自动创建之后自 定义这些自动生成的列。为了重新排布列的显示顺序,您可以设置单个列的DisplayIndex属性。

1.3.10 编辑
以下主题介绍如何使用C1DataGrid的编辑功能。

1.3.10.1 编辑单元格
用户可以在运行时轻松编辑单元格内容。编辑单元格的内容简单到只需选中一个单元格,并且删除或者改变该单元格的 内容。完成下列步骤来编辑单元格内容: 1. 双击要编辑的单元格。

一个光标将出现在该单元格中,表示它可以被编辑,与此同时铅笔图标将出现在行指示列,表明该行的某个单元格处于 编辑模式。 2. 删除文本,或者键入全新的文本,再或者在现有文本之后附加文本,以完成对单元格的编辑:

3. 按下ENTER键或者离开该单元格,您对此单元格所做的更改将生效:

指示编辑状态的铅笔图标将不再可见。 请注意CanUserEditRows属性必须设置为True(默认值),以便使得最终用户可以对单元格进行编辑。具体示例,请参 见禁用单元格编辑。

1.3.10.1.1 禁用单元格编辑

DataGrid for WPF 帮助文档
默认情况下,用户在运行时可以编辑内容。更多信息,请参见编辑单元格。如果您愿意,您可以通过设置 C1DataGrid.CanUserEditRows属性为False禁用单元格编辑功能。

17

在设计时
要禁用单元格编辑,须完成下列步骤: 1. 单击C1DataGrid控件以选中。 2. 导航至属性窗体,并找到CanUserEditRows属性。 3. 清除位于CanUserEditRows属性右侧的复选框。

通过XAML
例如,为了禁用单元格编辑,添加 CanUserEditRows="False"至<c1:C1DataGrid>,因此XAML将类似以下代码片段: <c1:C1DataGrid Name="c1datagrid1" Height="180" Width="250" CanUserEditRows="False" />

通过代码
例如,要禁用单元格编辑,请将以下代码添加到项目中: Visual Basic Me.C1DataGrid1.CanUserEditRows = False

C# this.c1DataGrid1.CanUserEditRows = false;

您所完成的步骤 运行该应用程序,并双击一个单元格;观察到单元格将不会切换到编辑模式,并且在运行时不能编辑grid内容。有关单 元格编辑的更多信息,参见编辑单元格主题。

1.3.10.2 锁定grid
默认情况下,用户可以交互并编辑grid以及grid中的列。如果需要,您可以通过IsReadOnly设置grid或者grid中特定的列 为不可编辑。

通过XAML
为了锁定grid不被编辑,添加IsReadOnly="True"至<c1:C1DataGrid>,代码将类似以下所示: <c1:C1DataGrid x:Name="C1DataGrid1" IsReadOnly="True">

通过代码
为了锁定grid不被编辑,设置IsReadOnly属性为true。例如: Visual Basic

DataGrid for WPF 帮助文档
Me.C1DataGrid1.IsReadOnly = True

18

C# this.c1DataGrid1.IsReadOnly = true;

1.3.11 过滤
WPF及Silverlight版DataGrid包括集中不同的选项用来过滤grid。您可以添加列过滤,行过滤,或者全文grid过滤。您可 以使用基本的过滤功能或者您可以使用C1.WPF.DataGrid.Filters.dll程序集,该程序集提供了比grid内置的过滤功能更多 的高级搜索选项。如何选择对grid进行过滤取决于您的需要-例如,如果您仅仅希望最终用户可以对一列进行过滤或者 您的应用程序需要更多的自定义过滤。

1.3.11.1 基本列过滤
对于基本的列过滤,只需要简单地设置CanUserFilter属性的值为True。这将在grid的用户界面添加一个列的过滤元素, 允许最终用户在每一列通过一个下拉框执行过滤操作。 默认情况下,CanUserFilter 属性将被设置为True,过滤将启用。如果您需要手动启用基本过滤,您可以使用以下标记或 代码: XAML <c1:C1DataGrid Name="c1datagrid1" Height="180" Width="250" CanUserFilter="True" /> Visual Basic Me.C1DataGrid1.CanUserFilter = True C# this.c1DataGrid1.CanUserFilter = true; 更多细节及示例,请参见对列进行过滤(第1.3.11.2章节)。

1.3.11.2 对列进行过滤
WPF版DataGrid的用户界面包括了一个过滤列元素,允许用户在运行时通过指定具体的条件对列进行过滤。 为了在运行时对列的文本进行过滤,须完成下列步骤: 1. 在一个文本列的列头单击下拉箭头:

2. 在过滤文本框中输入您希望该列进行过滤的文本,并单击Filter按钮。该列将被过滤。

DataGrid for WPF 帮助文档
Filter选项取决于列类型。可能包括以下过滤器类型: 文本列 在文本列中,过滤器栏显示如下:

19

您可以通过是否列中的项目包含过滤条件,以过滤条件开头,和过滤条件相等,或者不相等,对列进行过滤。

布尔型列 布尔型的复选框列可以通过是否列中的项目被选中的条件进行过滤。

数值列 数值列为过滤提供了几个选项:

DataGrid for WPF 帮助文档
您可以通过特定的条件来过滤列:

20

您可以使用And和Or单选按钮以便通过多个条件进行过滤:

注意:CanUserFilter属性必须设置为True(默认值)以便允许过滤。

1.3.11.3 过滤行过滤
如果您愿意,您可以添加一个可见的过滤行列至grid的顶部或底部。过滤行的列将显示为每一个单元格均包含一个文本 框的集合行。在文本框中输入文本时,该列的文本和grid被输入的文本进行过滤:

DataGrid for WPF 帮助文档

21

例如,下面的标记增加了2个过滤器行,一个在顶部,一个在grid的底部: XAML <c1:C1DataGrid x:Name="grid" Grid.Row="1" CanUserAddRows="False" CanUserFreezeColumns="True" FrozenTopRowsCount="1" FrozenBottomRowsCount="1" RowHeight="30" > <c1:C1DataGrid.TopRows> < c1:DataGridFilterRow /> </c1:C1DataGrid.TopRows> <c1:C1DataGrid.BottomRows> < c1:DataGridFilterRow/> </c1:C1DataGrid.BottomRows> </c1:C1DataGrid> 您可以参见C1DataGrid_Demo2010/Filtering/FilterRow/FilterRow.xaml示例。

1.3.11.4 全文grid过滤
C1DataGrid也支持针对整个grid的全文过滤。为data grid设置一个attached属性,允许最终用户通过在一个外部的文本 框输入文本,过滤整个data grid(一次过滤全部的列)。在grid中全部的匹配结果将按照用户的输入内容高亮显示。 为使用该方法用作grid过滤,您需要添加一个文本框至您的应用程序,并在FullTextSearchBehavior attached属性中引用 该控件。例如,下面的XAML标记: XAML <StackPanel> <c1:C1TextBoxBase x:Name="filterTextBox" Width="200" Watermark = "Type here to filter text"/> <c1:C1DataGrid x:Name="c1dg" c1:C1NagScreen.Nag="True"> < c1:C1FullTextSearchBehavior.FullTextSearchBehavior> < c1:C1FullTextSearchBehavior Filter="{Binding ElementName=filterTextBox,Path=C1Text}"/> < /c1:C1FullTextSearchBehavior.FullTextSearchBehavior> </c1:C1DataGrid> </StackPanel> 具体示例,请参见C1DataGrid_Demo2010/Filtering/OneTextBoxFilter/OneTextBoxFilter.xaml示例。

1.3.11.5 高级过滤

DataGrid for WPF 帮助文档

22

一种是通过使用C1AdvancedFiltersBehavior添加高级过滤。C1AdvancedFiltersBehavior增加了一系列的高级过滤功能至 C1DataGrid的内置列。例如,这种行为增加了几个预定义的过滤器,扩展了每一列的选项: XAML <c1:C1DataGrid> < c1:C1AdvancedFiltersBehavior.AdvancedFiltersBehavior> < c1:C1AdvancedFiltersBehavior/> < /c1:C1AdvancedFiltersBehavior.AdvancedFiltersBehavior> </c1:C1DataGrid>

1.3.11.6 列过滤器列表
对grid进行过滤的一种选项是通过XAML添加一个过滤器的列表至一列。例如,以下标记语言向一个数值列添加三个过 滤器,其中包括一个自定义过滤器叫做RangeFilter: XAML <c1:DataGridNumericColumn Header="Range filter" Binding="{Binding StandardCost}" FilterMemberPath="StandardCost"> < c1:DataGridNumericColumn.Filter> < c1:DataGridContentFilter> < c1:DataGridFilterList> <local:DataGridRangeFilter Minimum="0" Maximum="1000"/> < c1:DataGridNumericFilter/> < c1:DataGridTextFilter/> < /c1:DataGridFilterList> < /c1:DataGridContentFilter> < /c1:DataGridNumericColumn.Filter> </c1:DataGridNumericColumn> 可以通过以下路径来引用预先安装的产品示例: Documents | ComponentOne Samples | Silverlight

1.3.11.7 禁用列过滤
默认情况下,用户可以在运行时过滤grid中的列。更多信息,请参见对列进行过滤(第1.3.11.2章节)。如果您希望这么 做,您可以通过设置C1DataGrid.CanUserFilter属性为False禁用列过滤功能。

在设计时
要禁用列过滤,须完成下列步骤: 1. 单击C1DataGrid控件以选中。 2. 在“属性”窗口中,找到CanUserFilter 属性。 3. 清除紧邻在CanUserFilter属性右侧的复选框。

通过XAML

DataGrid for WPF 帮助文档
例如,为了禁用列过滤,向<c1:C1DataGrid>标签添加CanUserFilter="False",使得代码如下所示: <c1:C1DataGrid Name="c1datagrid1" Height="180" Width="250" CanUserFilter="False" />

23

通过代码
例如,为了禁用列过滤,请将以下代码添加到您的工程: Visual Basic Me.C1DataGrid1.CanUserFilter = False C# this.c1DataGrid1.CanUserFilter = false; 您所完成的步骤 运行该应用程序,可以观察到,您将不再可以在运行时对列进行过滤;显示过滤框的下拉箭头将不在运行时可见。有关 列过滤的更多信息,请参见对列进行过滤(第1.3.11.2章节)的主题。

1.3.11.8 标签过滤列表
另一个对grid进行过滤的选项是添加显示在一个tab control的过滤器列表: XAML <c1:DataGridNumericColumn Header="Filters inside a tab control" Binding="{Binding StandardCost}" FilterMemberPath="StandardCost"> < c1:DataGridNumericColumn.Filter> < c1:DataGridContentFilter> < local:DataGridTabFilters Width="250"> < local:DataGridRangeFilter Minimum="0" Maximum="1000"/> < c1:DataGridNumericFilter/> < c1:DataGridTextFilter/> < /local:DataGridTabFilters> < /c1:DataGridContentFilter> < /c1:DataGridNumericColumn.Filter> </c1:DataGridNumericColumn> 您可以通过以下路径来引用预先安装的产品示例: Documents | ComponentOne Samples | Silverlight

1.3.12 冻结
用户可以在运行时冻结列,防止它们在水平方向上发生滚动。这个功能非常有用,因为它将保证特定的列在grid改变大 小或者滚动时保持始终可见。冻结栏允许用户冻结列。当可见时,默认情况下,冻结栏出现在第一列的左侧。

DataGrid for WPF 帮助文档

24

要冻结特定的列,将冻结栏移到要冻结的列的右边。例如,在下面的图像中,冻结栏被移到了第二列的右边:

一列被冻结,当grid水平滚动时,它们将不再滚动。例如,在下面的图像中,前两列被冻结:

请注意ShowVerticalFreezingSeparator属性必须设置为Left(默认为None),以便使得冻结栏可见,同时 CanUserFreezeColumns属性必须设置为Left(默认为None)以便最终用户可以在运行时对列进行冻结。具体示例,请 参见启用列冻结(第1.3.12.1章节)。

1.3.12.1 启用列冻结
您可能希望在运行时冻结一些列,使得它们在grid发生水平滚动时保持可见。更多信息,请参见冻结列(第1.3.12章 节)。该功能在默认情况下没有启用,但是您可以通过设置CanUserFreezeColumns属性的值为Left启用该功能。

在设计时
为了使列冻结,须完成以下步骤: 1. 单击C1DataGrid控件以选中。 2. 在“属性”窗口中,找到CanUserFreezeColumns 属性。 3. 单击CanUserFreezeColumns 属性旁边的下拉箭头并选择Left。

通过XAML
例如,为启用列冻结,向<c1:C1DataGrid>标签添加CanUserFreezeColumns="Left",使其结果如下所示: <c1:C1DataGrid Name="c1datagrid1" Height="180" Width="250" CanUserFreezeColumns="Left" />

通过代码

DataGrid for WPF 帮助文档
例如,为了启用列冻结,请将以下代码添加到您的工程中: Visual Basic Me.C1DataGrid1.CanUserFreezeColumns = DataGridColumnFreezing.Left C# this.c1DataGrid1.CanUserFreezeColumns = DataGridColumnFreezing.Left;

25

您所完成的步骤 运行该应用程序,可以观察到在运行时,冻结栏是可见的。可以移动冻结栏以选择那些列为冻结状态;该栏左侧的列将 被冻结,因此当grid发生水平滚动时,该栏左侧的列将始终可见。有关列冻结的更多信息,请参见冻结列(第1.3.12章 节)主题。

1.3.12.1.1 冻结grid行
您可能希望冻结grid顶部或者底部的行,因此当grid在运行时发生垂直方向滚动时,这些行将始终位于可见区域。默认 情况下不启用此功能,但是如果您需要,可以通过设置FrozenTopRowsCount以及FrozenBottomRowsCount属性启用行 冻结功能。

在设计时
要冻结顶部和底部的行,须完成下列步骤: 1. 单次点击C1DataGrid控件以选中,并导航至属性窗体。 2. 在“属性”窗口中,找到FrozenTopRowsCount属性,单击旁边的文本框属性,输入“2”,以设置顶部冻结的行的个 数。 3. 找到FrozenBottomRowsCount属性,单击旁边的文本框属性,输入“2”,以设置底部冻结的行的个数。

通过XAML
例如,为了冻结顶部和底部的两行,需要添加FrozenTopRowsCount="2" FrozenBottomRowsCount="2"至 <c1:C1DataGrid>标签,添加之后XAML代码应当如下所示: <c1:C1DataGrid Name="c1datagrid1" Height="180" Width="250" FrozenTopRowsCount="2" FrozenBottomRowsCount="2" />

通过代码
例如,要冻结顶部和底部的行,将下面的代码添加到您的工程中: Visual Basic Me.C1DataGrid1.FrozenTopRowsCount = True Me.C1DataGrid1.FrozenBottomRowsCount = True

C# this.c1DataGrid1.FrozenTopRowsCount = true;

DataGrid for WPF 帮助文档
this.c1DataGrid1.FrozenBottomRowsCount = true; 您所完成的步骤

26

运行该应用程序,可以观察到该应用程序顶部和底部行被冻结。此时垂直方向滚动grid,可以注意到顶部和底部的两行 将不会滚动,始终锁定在原地。默认情况下,添加新行将位于grid的底部,因此它将是被冻结的行中的一个。

1.3.13 分组
您可以启用grid的分组以及分组区域,使得最终用户可以在运行时,在您的grid中对列进行分组,以获得更佳的信息组 织显示。更多信息,请参见对列进行分组。默认情况下,用户不能对grid中的列进行分组,但是您可以通过设置 C1DataGrid.CanUserGroup属性的值为True以启用该功能。

在设计时
为了启用分组,须完成以下步骤: 1. 单击C1DataGrid控件以选中。 2. 在“属性”窗口中,找到CanUserGroup 属性。 3. 选中靠近CanUserGroup属性旁边的复选框。

通过XAML
例如为了启用分组,需要添加CanUserGroup="True"至< c1:C1DataGrid>,之后XAML代码应当如下所示: <c1:C1DataGrid Name="c1datagrid1" Height="180" Width="250" CanUserGroup=True" />

通过代码
例如,为了启用分组,需要在工程中添加以下代码: Visual Basic Me.C1DataGrid1.CanUserGroup = True C# this.c1DataGrid1.CanUserGroup = true;

您所完成的步骤 运行该应用程序,可以注意到分组区域出现在grid的顶部。注意,您还可以自定义分组区域的可见性。关于分组区的更 多信息,请参见显示分组区(第1.3.13.1章节)主题。

1.3.13.1 显示分组区
默认情况下grid中的分组是禁用的,分组区域不可见。更多信息,请参见对列进行分组(第1.3.13.2章节)。当 CanUserGroup属性设置为True时,将启用分组,并且分组区域将变为可见。但是您也可以无视是否分组功能启用,单 独地显示或者隐藏分组区域。默认情况下,分组区域当分组功能没有启用时为不可见,但是您仍然可以通过设置 ShowGroupingPanel属性的值为True将此区域变为可见。

在设计时

DataGrid for WPF 帮助文档
要显示分组区域,须完成下列步骤: 1. 单击C1DataGrid控件以选中。 2. 在“属性”窗口中,找到ShowGroupingPanel 属性。 3. 选中ShowGroupingPanel属性相邻的复选框。

27

通过XAML
例如,为了显示分组区域,添加ShowGroupingPanel="True"至<c1:C1DataGrid>,使得XAML代码如下所示: <c1:C1DataGrid Name="c1DataGrid1" Height="180" Width="250" ShowGroupingPanel="True" />

通过代码
例如,要显示分组区域,请将以下代码添加到工程中: Visual Basic Me.C1DataGrid1.ShowGroupingPanel = True C# this.c1DataGrid1.ShowGroupingPanel = true; 您所完成的步骤 运行该应用程序,可以注意到分组区域出现在grid的顶部。注意,即使分组区域是可见的,如果CanUserGroup 属性为 False,则分组功能仍然不是启用状态。更多信息,请参见在grid中启用分组(第1.3.13章节)主题。

1.3.13.2 对列进行分组
最终用户可以在运行时,在grid中对列进行分组以获取更好的信息组织形式。grid顶部的分组区域可以让您通过简单的 拖放操作来轻松地对列进行分组:

为了对一列进行分组,只需要将一列的列头拖拽到分组区域。

DataGrid for WPF 帮助文档

28

通过单击分组区域中的列头,可以对分组项目进行排序。在下面的图像中,分组列已被反向排序:

通过执行拖放操作,可以将更多的列拖拽到分组区域,以实现多列分组。

要删除分组,只需单击grid分组区域中紧邻分组列的“x”按钮:

DataGrid for WPF 帮助文档

29

请注意,CanUserGroup属性必须设置为True以便分组区域可见且分组功能启用(默认情况下该属性设置为False)。更 多信息,请参见grid的启用分组。有关显示分组区域的更多信息,请参见显示分组区域主题。

1.3.13.3 分组汇总
WPF版DataGrid包含C1.WPF.DataGrid.Summaries.dll程序集,该程序集可以通过添加一个汇总行以增强grid的分组功 能。 Summarize组件包含以下功能: SummaryRow:显示关联到每一列的聚合函数的行(参见 C1DataGrid_Demo2010/Grouping/GrandTotal.xaml) GroupRowWithSummaries:与前一个功能相同,但是汇总将显示在分组行而不是普通行。(请参见 C1DataGrid_Demo2010/Grouping/Grouping.xaml)

1.3.14 键盘和鼠标导航
WPF版DataGrid支持一些运行时的鼠标和键盘导航选项,这些选项提供了更多的易用性。以下主题详细介绍了一些最终 用户的交互行为。

1.3.14.1 键盘导航
下表列出了可用于在运行时导航和操作grid的键盘快捷键。值得注意的是,在苹果电脑上,最终用户可以使用 Command(或Apple)键以替代这里提到的Ctrl键: 组合键 DOWN Arrow UP Arrow LEFT Arrow RIGHT Arrow HOME END PAGE DOWN PAGE UP TAB 描述 将焦点移到当前单元格下方的单元格中。如果焦点是在最后一行,则按下向下箭 头什么都不发生。 将焦点移到当前单元格上方的单元格中。如果焦点是在第一行,则按下向上箭头 什么都不会发生。 将焦点移到同一行中的前一个单元格中。如果焦点是在第一个单元格中,则按下 左箭头什么都不会发生。 将焦点移到同一行中的下一个单元格中。如果焦点是在最后一个单元格中,则按 下右箭头什么都不会发生。 将焦点移到当前行中的第一个单元格。 将焦点移到当前行中的最后一个单元格中。 将所显示的行数向下滚动。将焦点移动到当前显示页面的最后一行,而不会改变 当前列的位置。如果最后一行只是部分显示,则滚动grid以完全显示最后一行。 将所显示的行数向上滚动。将焦点移到当前显示页面的第一行,而不会改变当前 列的位置。如果第一行只是部分显示,则滚动grid以完全显示第一行。 如果当前单元格处于编辑模式,将焦点移到当前行的下一个可编辑的单元格。如 果焦点已经在该行的最后一个单元格,则提交目前的更改,并移动焦点到下一行 的第一个可编辑单元格。如果焦点在控件的最后一个单元格中,将焦点移到父容 器的按照Tab顺序中的下一个控件中。

DataGrid for WPF 帮助文档
SHIFT+TAB

30

如果当前单元格不处于编辑模式,则将焦点移到父容器的按Tab顺序中的下一个 控件中。 如果当前单元格处于编辑模式,将焦点移到当前行上一个可编辑的单元格。如果 焦点已经在该行的第一个单元格中,则提交任何所做的更改并将焦点移动到上一 行的最后一个单元格中。如果焦点位于控件的第一个单元格中,则将焦点移到父 容器的按Tab顺序中的前一个控件中。 如果当前单元格不处于编辑模式,则将焦点移到父容器的按照Tab顺序中的前一 个控件中。 将焦点移到当前列中的最后一个单元格中。 将焦点移动到当前列的第一个单元格。 将焦点移到当前行中的最后一个单元格中。 将焦点移到当前行中的第一个单元格。 将焦点移到控件中的第一个单元格。 和PAGE DOWN功能相同。 和PAGE UP功能相同。 在选定的单元格上切换编辑模式(如果grid和对应列的IsReadOnly属性设置为 False)。 在选定的单元格上切换编辑模式(如果grid和对应列的IsReadOnly属性设置为 False)。 取消单元格或新行编辑。 删除选定行。 滚动到新建行,并开始编辑它。

CTRL + DOWN ARROW CTRL + UP ARROW CTRL + RIGHT ARROW CTRL + LEFT ARROW CTRL + HOME CTRL + PAGE DOWN CTRL + PAGE UP ENTER F2 ESC DEL INSERT

1.3.14.2 鼠标导航
下表列出了一些可用于在运行时在grid上进行导航或者其他操作的鼠标和键盘快捷键。值得注意的是,在苹果电脑上, 最终用户可以使用Command(或Apple)键以替代这里提到的Ctrl键:

鼠标动作 单击一个没有被选中的行 单击当前行的某个单元格。 拖动一个列头单元格 拖动列头分隔符 点击列头单元格

描述 单击一个没有被选中的行 使得发生单击的单元格进入编辑模式。 移动该列,使得可以拖放到一个新的位置(假定当前CanUserReorderColumns 属 性设置为True且当前被拖动行的CanUserRorder 属性为True)。 调整列的宽度(假定CanUserResizeColumns 属性设置为True且当前列的 CanUserResize 属性为True)。 如果ColumnHeaderClickAction属性设置为Sort,当用户单击列头时,将对列进行 排序(假定此时CanUserSortColumns 属性设置为True且当前列的CanUserSort 属 性设置为True)。 单击已排序的列的列头,将对该列进行反向排序。 按下Ctrl键的同时单击多个列头将按照单击的顺序对多列进行排序。

DataGrid for WPF 帮助文档
按住Ctrl键的同时单击行 SHIFT+单击一行

31

如果ColumnHeaderClickAction属性设置为Select,则在SelectionMode支持列选 的情况下,单击可以选中整列。 修改一个非连续的多行选择(如果SelectionMode为支持多行,多单元格,或多 列)。 修改一个连续的多行选择(如果SelectionMode为支持多行,多单元格,或多 列)。

1.3.14.3 多行选择
如果SelectionMode属性设置为MultiRow,导航行为将不会发生改变,但是在按下SHIFT(包括同时按下CTRL+SHIFT) 键的情况下,键盘或鼠标导航将改变一个多行选择的状态。在导航开始前,控件将当前行标记为锚定行。当您在按下移 动时,选择包括锚定行和当前行之间的所有行。 选择键 以下选择键修改多行选择: SHIFT+DOWN ARROW SHIFT+UP ARROW SHIFT+PAGE DOWN SHIFT+PAGE UP CTRL+SHIFT+DOWN ARROW CTRL+SHIFT+UP ARROW CTRL+SHIFT+PAGE DOWN CTRL+SHIFT+PAGE UP 鼠标选择 当SelectionMode属性设置为MultiRow,单击行的同时按下CTRL或SHIFT将修改多行选择。 当您单击一行同时按下SHIFT键时,选择将包含全部的位于第一次单击确定的锚点行和当前行之间的全部行。在保持 SHIFT按下的状态下继续单击将改变当前行,而不会改变最初的锚点行。 如果在导航过程中CTRL键被按下,则方向键将导航至边界单元格;例如,如果您此时位于第一行,当您按下 CTRL+DOWN键,您将导航至最后一行,如果SHIFT键同时被按下,则全部的行将被选中。

1.3.14.4 自定义键盘导航
您可以添加您自己的自定义导航至C1DataGrid控件。自定义键盘导航将使您能够控制最终用户如何和grid进行交互。例 如,您可以阻止用户导航到只读列或具有Null值的单元格中。在分级grid中,您可以设置父子grid之间的导航方式。为 添加自定义键盘导航,您需要处理KeyDown事件,并添加代码将默认的导航逻辑替换为您的自定义导航逻辑。

添加KeyDown事件处理程序
完成以下步骤以添加KeyDown事件处理程序: 1. 切换到代码视图,添加KeyDown事件的事件处理程序,例如: 2. 切换到源代码视图并添加事件处理程序至C1DataGrid控件实例,例如: <c1:C1DataGrid x:Name="c1DataGrid1" AutoGenerateColumns="True" KeyDown="c1DataGrid1_KeyDown"> </c1:C1DataGrid> 现在您可以将代码添加到KeyDown事件处理程序以自定义默认导航。具体示例,您可以参见位于ControlExplorer示例中 的分级grid示例(C1_MDSL_RowDetail)。

DataGrid for WPF 帮助文档
1.3.15 本地化应用

32

你可以本地化(翻译)WPF版DataGrid最终用户可见的字符串。WPF版DataGrid的本地化基于标准的.NET WinForms应 用程序相同的本地化机制。 要本地化应用程序,您需要完成以下步骤: 1. 为您希望支持的每种文化中添加资源文件。参加添加资源文件(第1.3.15.1章节)。 2. 更新您的工程文件所支持的文化。请参见添加支持的文化(第1.3.15.2章节)。 3. 并且,根据您的工程,设置当前的文化。请参见见设置当前文化(第1.3.15.3章节)。 下面的主题描述更详细的grid本地化。

1.3.15.1 添加资源文件
和WinForms其他应用程序一样,您可以为WPF版DataGrid创建一组资源文件。您可以为每一个所需要支持的文化创建 一个独立的资源文件,后缀名为.resx。当应用程序运行时,可以在这些资源和语言之间切换。请注意,您的应用程序所 使用的来自于WPF版DataGrid DLL中的所有组件必须使用相同的本地化资源。 本地化规范 要本地化grid,您需要为每个本地化的文化设置资源文件。以下为创建.resx资源文件推荐的规范: 所有.resx文件应该放在工程的Resources资源子文件夹。 文件应命名如下: XXX.YYY.resx,在这里: XXX 是相关的ComponentOne程序集的名称。 YYY 是资源的文化代码。如果您所翻译的是默认的invariant文化,则.resx文件不需要包含一个文化后缀。 例如: C1.WPF.DataGrid.de.resx –C1.WPF.DataGrid 程序集的德文 (de) 资源。 C1.WPF.DataGrid.resx –C1.WPF.DataGrid 程序集的invariant文化资源。 本地化字符串 下表列出的字符串可以被添加到一个.resx文件以本地化你的应用: 字符串 AddNewRow CheckBoxFilter_Checked ComboBoxFilter_S electAll DateTimeFilter_End DateTimeFilter_Start EmptyGroupPanel End Start Drag a column here to group by that column. 出现在日期时间列中的过滤器中的文本,表示日期时间 范围的结束点。 出现在日期时间列中的过滤器中的文本,表示日期时间 范围的起始点。 当没有列进行分组时,出现在分组区域的文本。 默认值 Click here to add a new row Checked Select All 描述 出现在添加新行的文本。 在过滤器中显示复选框列的文本,以指示该列是否应该 被过滤为选中的和未选中的项目。 出现在组合框中表示选择全部项目的文本。

DataGrid for WPF 帮助文档
Filter_Clear Filter_Filter NumericFilter_And NumericFilter_Equals Clear Filter And Equals 出现在过滤栏的文本,表示清除过滤条件。 出现在过滤栏中添加过滤条件的文本。 数值列过滤栏上出现的文本,表示多个过滤条件。

33

出现在数值列过滤栏的文本,表示过滤条件应的那个应 用到仅精确匹配。 出现在数值列过滤栏的文本,表示过滤条件应当应用到 值大于等于条件值的项目。 出现在数值列过滤栏的文本,表示过滤条件应当应用到 值大于条件值的项目。 出现在数值列过滤栏的文本,表示过滤条件应当应用到 值小于条件值的项目。 出现在数值列过滤栏的文本,表示过滤条件应当应用到 值小于等于条件值的项目。 出现在数值列过滤栏的文本,表示过滤条件应当应用到 值不等于条件值的项目。 数值列过滤栏上出现的文本,表示多个过滤条件。 出现在文本列过滤栏的文本,表示是否过滤条件将应用 到包含指定过滤条件字符串值的项目。 出现在文本列过滤栏的文本,表示是否过滤条件将应用 到精确匹配指定过滤条件字符串值的项目。 出现在文本列过滤栏的文本,表示是否过滤条件将应用 到不匹配指定过滤条件字符串值的项目。 出现在文本列过滤栏的文本,表示是否过滤条件将应用 到以指定过滤条件字符串值开头的项目。

NumericFilter_GreaterOrEquals Greater/Equals NumericFilter_Greater NumericFilter_Less NumericFilter_LessOrEquals NumericFilter_NotEquals NumericFilter_Or TextFilter_Contains TextFilter_Equals TextFilter_NotEquals TextFilter_StartsWith Greater Less Less/Equals Not Equals Or Contains Equals Not Equals Starts With

1.3.15.2 添加支持文化
一旦您为您的应用程序创建了资源文件,您需要为您的工程设置支持的文化。为这样做,须完成下列步骤: 1. 在“解决方案资源管理器”中,右键单击“工程”,选择“卸载”项目。该项目将变灰不可用。 2. 右键单击该项目,然后选择编辑ProjectName.csproj 选项(或编辑ProjectName.vbproj,那里的项目是你的项目 的名称)。 3. 在.csproj文件,找到 <SupportedCultures></SupportedCultures>标签。在标签之间,列出你想要支持的文化, 每一个分号分隔。例如: <SupportedCultures>fr;es;en;it;ru</SupportedCultures> 这将支持法语、西班牙语、英语、意大利语和俄语。 4. 保存并关闭.vbproj或.csproj文件。 5. 在“解决方案资源管理器”中,右键单击“工程”,然后从“内容”菜单中选择“重新加载”工程。 该工程将重新加载,现在将支持指定的文化。

1.3.15.3 设置当前文化
C1DataGrid控件将自动地根据应用程序选中的文化进行本地化,同时必须确保您没有将文件移动到其他位置,或者从工 程中排除了某些资源文件。默认情况下,当前的文化被指定为

DataGrid for WPF 帮助文档

34

System.Threading.Thread.CurrentThread.CurrentUICulture。如果你想使用其他的文化,你可以在你的应用程序使用下 面的代码来设置所需的文化: Visual Basic Public Sub New() ' 设置期望的文化,例如法国(法国)地区。 System.Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo("fr-FR") ' InitializeComponent() 调用。 ' 在调用 InitializeComponent() 之后添加任何初始化代码。 InitializeComponent() End Sub

C# public MainPage() { // 设置期望的文化,例如法国(法国)地区。 System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("fr-FR"); // InitializeComponent() 调用。 InitializeComponent(); // 在调用 InitializeComponent() 之后添加任何初始化代码。 }

1.3.16 行详细信息模板 1.3.16.1 行详细信息模板
行详细信息模板控制行细节区域的外观。 行的详细信息区域显示在一行,而且可以显示附加信息。 在Expression Blend,您可以在设计时创建一个空的模板,通过选择C1DataGrid控件然后单击对象|编辑其他模板|编辑行 详细信息模板 |创建空。 你可以在行详细信息模板中包括文本,控件,和更多,并包括控件绑定到数据。 例如,下面的模板包括绑定和未绑定 文本和复选框: XAML <c1:C1DataGrid.RowDetailsTemplate> <!-- 开始行细节部分。 --> <DataTemplate> <Border BorderBrush="DarkGray" BorderThickness="1" Background="Azure"> <StackPanel Orientation="Horizontal"> <StackPanel> <StackPanel Orientation="Horizontal"> <!-- -控件被绑定到属性。 --> <TextBlock FontSize="16" Foreground="MidnightBlue" Text="{Binding Name}" Margin="0,0,10,0" VerticalAlignment="Bottom" /> <TextBlock FontSize="12" Text="Order Date: "

DataGrid for WPF 帮助文档

35

VerticalAlignment="Bottom"/> <TextBlock FontSize="12" Text=" Complete:" VerticalAlignment="Bottom" /> CheckBox IsChecked="{Binding Complete, Mode=TwoWay}" VerticalAlignment="Center" /> </StackPanel> <TextBlock FontSize="12" Text="Notes: " /> <TextBox FontSize="12" Text="{Binding Notes, Mode=TwoWay}" Width="420" TextWrapping="Wrap"/> </StackPanel> </StackPanel> </Border> </DataTemplate> <!-- -结束行细节部分。--> </c1:C1DataGrid.RowDetailsTemplate>

1.3.16.2 禁用行细节切换
当网格包括子网格或者你已经创建了一个主细节网格,默认情况下该行的细节可以切换,以便它们是可见的或折叠的。 如果你选择,但是,您可以禁用切换的详细信息行的特征通过设置CanUserToggleDetails属性值为false。 请注意,您将 需要有一个网格和行的详细信息,以查看该示例中的更改。

在设计时
禁用行详细信息的切换,完成以下步骤: 1. 点击C1DataGrid控件一次并选择它。 2. 导航到“属性”窗口中,确定CanUserToggleDetails属性位置。 3. 清空紧邻CanUserToggleDetails属性的复选框。

在XAML中
例如,禁用行详细的信息的切换,添加CanUserToggleDetails =“false”到< C1:c1datagrid >标签使其出现类似下面 的: < C1:c1datagrid Name=“c1datagrid1” height=“180” width=“250” canusertoggledetails =“false”/>

在代码中
例如,禁用行详细信息的切换,将下面的代码添加到你的项目中: Visaul Basic Me.C1DataGrid1.CanUserToggleDetails = False C# this.c1DataGrid1.CanUserToggleDetails = false; 你所完成的 运行该应用程序,并观察到,您可以在运行时不再切换网格中的行详细信息。 行标头上的箭头图标表明可以被切换的 行详细信息不再可视,因此切换多行不再是一种选项。

DataGrid for WPF 帮助文档
1.3.17 排序
排序网格列在运行时是简单的WPF数据网格。 在“列”的头上单击一次要排序的列,这样你希望的列会被排序。 你会注意到,当一列被排序的时候,会有一个排序指示符号出现:

36

你可以再次点击列标题来反转排序;注意到分类符号的变化方向。 通过排序一列对多个列进行排序,然后按住Ctrl键的同时单击第二栏头添加该列到你的排序条件上。 例如,在下面的图 像中,类别列是先进行排序,然后将名称列为反向排序:

请注意,这个CanUserSort 属性必须设置为True(默认)的分类是可能的。

1.3.17.1 禁用列排序
默认情况下,终端用户可以在运行时对网格中的列进行排序。 更多信息,见列排序(第1.3.17.章节)。 如果你选择, 但是,您可以通过设置CanUserSort属性为false禁用列排序的特征。

在设计时
要禁用列排序,完成下列步骤: 1. 点击C1DataGrid控件一次并选择它。 2. 导航到“属性”窗口中,并确定CanUserSort属性的位置。 3. 清除紧邻CanUserSort属性的复选框。

在XAML
例如,禁用列排序,添加canusersort =“false”到< C1:c1datagrid >标签使其出现类似下面的: <c1:C1DataGrid Name="c1datagrid1" Height="180" Width="250" CanUserSort="False" /> 代码中 例如,要禁用列排序,请将以下代码添加到项目中: Visual Basic Me.C1DataGrid1.CanUserSort = False

DataGrid for WPF 帮助文档

37

C# this.c1DataGrid1.CanUserSort = false;

你所完成的 运行该应用程序,并且观察到,你可以在运行时不再进行排序列。 在运行时,单击一个列的头,将不会对网格进行排 序,并且在列标题中排序指示器不可见。 有关列排序的更多信息,参见排序列(第1.3.17.章节)的话题。

1.3.18 DataGrid控件的外观
以下主题描述了WPF和Silverlight的C1DataGrid外观。

1.3.18.1 C1DataGrid主题
WPF DataGrid包含几个主题,允许您自定义你的网格外观。 当你第一次添加C1DataGrid控件到页面,看起来类似下面 的图像: 这是控件的默认外观。 你可以通过使用内置的主题或者创建自己的自定义主题来改变这个外观。 所有的内置主题是基 于WPF工具包的主题。 内置的主题进行了描述和下面的图片,注意下面的图片中,一个单元格已被选中,并且鼠标悬 停在另一个单元格显示选定的和悬停风格: 主题名称 C1ThemeBureauBlack 主题预览

DataGrid for WPF 帮助文档
C1ThemeExpressionDark

38

C1ThemeExpressionLight

C1ThemeRainierOrange

DataGrid for WPF 帮助文档
C1ThemeShinyBlue

39

C1ThemeWhistlerBlue

1.3.18.2 编辑模板和风格
使用WPF控件的主要优点之一是控件是一个"看上去不那么"完全可定制的用户界面。 就像你设计自己的用户界面 (UI),或者看起来和感觉到,对于WPF应用程序,您可以提供您自己的WPF DataGrid数据管理的UI。 可扩展应用程 序标记语言(XAML;发音为“zammel”),基于声明的XML语言,提供了一个简单的方法来设计你的用户界面而无需编 写代码。WPF DataGrid包括几个模板,这样你就不需要从头开始创建自己的用户界面。

可访问的模板
您可以通过选择C1DataGrid 控件,在DataGrid中的菜单,选择“编辑其他模板来访问微软表达混合模板。 创建一个模板 的副本,您可以编辑,打开C1DataGrid菜单,选择“编辑其他模板,选择你想要编辑的模板,并选择编辑一个拷贝,来 创建当前模板的一个可编辑的副本,或创建空的,来创建一个新的空白模板。 注意: 如果您在菜单中创建新模板,则这个模板将自动与该模板的属性相关联。 如果你手动在XAML中创建一个 模板,你不得不需要将适当的模板属性链接到你所创建的模板上。 这个C1DataGrid控制提供了多种样式属性,你可以使用并完全改变控件的外观和它的行,状态栏,标题,和单元格。 一些包含的样式在下面的表格中描述: 风格 C1DataGrid.CellStyle C1DataGrid.ColumnHeaderStyle 描述 获取或设置用于渲染单元格时使用的样式。 获取或设置用于绘制列标题时使用的样式。

DataGrid for WPF 帮助文档
C1DataGrid.DragOverColumnStyle C1DataGrid.DrageSourceColumnStyle C1DataGrid.DropIndicatorStyle C1DataGrid.FilterStyle C1DataGrid.FocusStyle C1DataGrid.GroupColumnHeaderStyle C1DataGrid.GroupRowHeaderStyle C1DataGrid.GroupRowStyle C1DataGrid.NewRowHeaderStyle C1DataGrid.NewRowStyle C1DataGrid.RowHeaderStyle C1DataGrid.RowStyle 风格应用于内容控件元素上,当被移动时用来显示拖拽列。 样式应用到内容控件,在它开始进行拖放操作时放置在源列上。 风格应用于内容控件元素并用于指示拖拽列被拖放的位置。 获取或设置用于筛选器控制容器的样式。 设置用于显示在C1DataGrid焦点上的内部矩形的风格。 获取或设置在组面板中显示列标题时使用的样式。 获取设置的组行标题的样式集。 获取设置的组行的样式。 获取或设置用于输入新项目的渲染的行标题的样式。 获取或设置为输入新项目的渲染行时使用的样式。 获取或设置用于渲染行标题时使用的样式。 获取或设置渲染行时使用的样式。

40

1.3.18.3 表格式选项
以下主题详细表格式选项,包括网格头和表对象的位置。

1.3.18.3.1 设置行标题和列标题的可见度
默认行和列标题在网格中可见。 然而,如果你选择,你可以设置一个或两个标题被隐藏,通过设置HeadersVisibility属 性。 你可以通过下列选项之一设置HeadersVisibility属性:

选项 None Column Row All (Default)

描述 在网格中不可见行或列头文件。 只有列标题在网格中可见。 只有行标题在网格中可见。 列和行标题在网格中可见。

1.3.18.3.2 设置网格线的可见性
默认情况下,垂直和水平的网格线在网格中可见。 然而,如果你选择,你可以设置一个或两个设置网格线被隐藏,通 过设置GridLinesVisibility属性。 你可以通过下列选项之一设置GridLinesVisibility属性:

选项 None

描述 无论是水平还是垂直的网格线在网格中是可见的。

DataGrid for WPF 帮助文档
Horizontal Vertical All (Default) 只有水平的网格线在网格中可见。 只有垂直的网格线在网格中可见。 在网格中,水平和垂直的网格线是可见的。

41

1.3.18.3.3 设置新行的可见度
默认情况下,添加新行设置位置在网格底部。 然而,如果你选择,你可以通过设置NewRowVisibility 属性改变其位置。 你可以通过下列选项之一设置NewRowVisibility 属性:

选项 Top

描述 添加新的行显示在网格的顶部。

Bottom (默认)

在网格的底部添加了新的行。

1.3.18.3.4 设置垂直和水平滚动条的可见性
默认情况下,网格的水平和垂直滚动条只有在网格内容的高度或宽度超过网格的大小时才看得见的。 然而,如果你选 择,你可以设置滚动条总是不可见,而且甚至通过设置VerticalScrollbarVisibility和HorizontalScrollbarVisibility属性一起 禁用它们。 你可以通过下列选项之一设置VerticalScrollbarVisibility和HorizontalScrollbarVisibility属性: 选项 Disabled Auto (default) Hidden Visible 描述 禁用选择的滚动条。 自动(默认)只有当选择的网格的内容超过网格窗口时滚动条才会出现。 隐藏选择的滚动条似乎被隐藏。 可见选择的滚动条总是可见的。

1.3.18.3.5 设置行详细信息的可见性
默认行的详细信息是折叠的,而不是可见的。 你可以使用RowDetailsVisibilityMode属性来设置是否何时排的细节是可 见的。 你可以通过下列选项之一设置RowDetailsVisibilityMode属性: 选项 描述

VisibleWhenSelected VisibleWhenSelectedRow详细信息只有被选择时才可见。

Visible

可视行详细信息总是可见的。

DataGrid for WPF 帮助文档
Collapsed (默认) 折叠(默认)行详细信息出现折叠,并且是不可见的。

42

1.3.18.4 C1DataGrid画刷
WPF DataGrid提供了几种画笔的属性,你可以使用它们来完全改变控件的行,状态栏,标题,和单元格。 一些包括的 画笔在下面的表格中被描述:

主题名称 背景 前景 边框画笔 选择的画 笔 鼠标悬浮 画笔 行背景 行前景 交替的行 背景 交替的行 前景 水平的网 格线画笔 垂直的网 格线画笔

主题预览 获取或设置渲染时使用的背景画笔。 (此笔将应用于数据 网格的所有部分) 获取或设置渲染时使用的前景画笔。 (此画笔将应用于数 据网格的所有部分) 获取或设置渲染时使用的边框画笔。 (此笔将应用于数据 网格中的某些部分,这取决于主题) 获取或设置当渲染选择的多行和单行和单列标题等时使用 的选定画笔。 获取或设置当鼠标在多行和单行和单列标题等时使用的画 笔。 获取或设置该行的背景画笔。 获取或设置一个前景画笔行。 获取或设置一个交替行的背景画笔。 获取或设置一个交替行的前景画笔。 将画笔应用于水平线的获取。 将画笔应用于垂直线的获取。

WPF DataGrid使用ClearStyle技术设计。 有关详细信息,参见C1DataGrid (第1.3.18.5章节)。

1.3.18.5 C1DataGrid 清新的风格
WPF DataGrid支持控件一的新clearstyle技术,让你轻松控制颜色变化而无需改变控制模板。 通过设置几个颜色属性, 你可以快速的设计整个网格样式。 你完全可以通过简单的设置一些属性变化的C1DataGrid控件的外观,如C1DataGrid。背景属性设置的C1DataGrid控件 的颜色方案。 例如,如果你设置背景属性为“# ff663366”所以出现了类似于下面的XAML标记: <c1:C1DataGrid HorizontalAlignment="Left" Margin="10,10,0,0" Name="c1DataGrid1" VerticalAlignment="Top" CanUserFreezeColumns="Left" CanUserGroup="True" Background="#FFFFFFCC"/>网格将显示类似下面的图像:

DataGrid for WPF 帮助文档

43

如果你设置背景属性为“# ff663366”和前景的属性为“白”色,所以出现了类似于下面的XAML标记: <c1:C1DataGrid HorizontalAlignment="Left" Margin="10,10,0,0" Name="c1DataGrid1" VerticalAlignment="Top" CanUserFreezeColumns="Left" CanUserGroup="True" Background="#FF663366" Foreground="White"/> 网格将显示 类似下面的图像:

你甚至可以设置背景属性梯度值,例如,下面的代码: XAML <c1:C1DataGrid x:Name="c1DataGrid1" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" CanUserFreezeColumns="Left" CanUserGroup="True"> <c1:C1DataGrid.Background> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="GreenYellow" Offset="0.0" /> <GradientStop Color="YellowGreen" Offset="0.85" /> </LinearGradientBrush> </c1:C1DataGrid.Background> </c1:C1DataGrid> 网格将出现类似以下图像:

DataGrid for WPF 帮助文档

44

1.3.18.6 C1DataGrid模板部件
在微软表达配方中,你可以通过创建一个新的模板编辑模板部件(例如,单击C1DataGrid控件选择它并选择对象|编辑 模板|编辑副本)。 一旦你创建了一个新的模板,模板的部分将出现在部件窗口中:

注意,你可能需要为其选择控件模板在部件窗口上作为它可见的部分。 在部件窗口中,你可以双击任何元素来创建模板中的一部分。 一旦你这样做,该部分将在部件面板上的模板和元素的 图标上出现将,且根据指示选择进行改变:

在C1DataGrid控件上的可用模板部件包括: 名称 Body ColumnsHeader Grouping 类型 DataGridMainPanel 描述 包含网格体的面板。

DataGridColumnsHeaderPanel 面板包含一组数据网格列标题面板。 DataGridGroupingPresenter 显示分组的面板或另一个元素,如果有没有列在分组面板。 显示一个控件,该控件提供具有滑动的缩略图滚动条,其位置与 值相对应。

HorizontalScrollBar ScrollBar

DataGrid for WPF 帮助文档
Root RowsHeader VerticalScrollBar Grid DataGridRowsHeaderPanel ScrollBar 其灵活的网格区域,包含列和行。 面板包含数据网格行标题面板。

45

显示一个控件,该控件提供具有滑动的缩略图滚动条,其位置与 值相对应。

1.3.18.7 自定义网格的外观
下列主题的细节你可以通过改变网格的外观自定义C1DataGrid。 WPF DataGrid和Silverlight控件包括几个外观选项,包 括控件一的独一无二的clearstyle技术。 例如,可以更改网格的背景颜色或交替行背景。 有关更多信息clearstyle技术笔 记,参见C1DataGrid clearstyle(第1.3.18.5章节)的话题。 后续主题也详细更改网格的布局,包括如何设置标题的位置 和添加新的行栏。

1.3.18.7.1 改变网格的前景和背景颜色
WPF DataGrid包括ComponentOne的独特clearstyle技术使您能够简单地改变网格的整体外观。 以下步骤将详细介绍如 何设置C1DataGrid。背景属性完全改变网格的外观。 关于ComponentOne的clearstyle技术的更多细节,看c1datagrid clearstyle(第1.3.18.5)的话题。

在设计时
要改变网格的前景色和背景色,使其显得绿色,完成下列步骤: 1. 2. 3. 4. 5. 点击C1DataGrid控件一次并选择它。 导航到“属性”窗口,然后单击“背景属性”旁边的下拉箭头。 点击下拉箭头在框中的十六进制代码出现,并选择绿色。 导航到“属性”窗口,然后单击“前台属性”旁边的下拉箭头。 点击下拉箭头的方块中的十六进制代码出现,并选择白色。

在XAML
例如,改变网格的前景颜色和背景颜色,使它呈现绿色,添加到< C1:c1datagrid >标签使其出现类似下面的: <c1:C1DataGrid Name="c1datagrid1" Height="180" Width="250" Background="Green" Foreground="White" />在代 码中 例如,改变网格的前景色和背景色,使其显得绿色,在项目中添加以下代码: Visual Basic Me.C1DataGrid1.Background = New System.Windows.Media.SolidColorBrush(Colors.Green) Me.C1DataGrid1.ForeGround = New System.Windows.Media.SolidColorBrush(Colors.White) C# this.c1DataGrid1.Background = new System.Windows.Media. SolidColorBrush(Colors.Green); this.c1DataGrid1.Foreground = new System.Windows.Media. SolidColorBrush(Colors.White); 你所完成的 运行该应用程序,并观察到网格中的网格标题中出现了白色的文本。 值得注意的是,与C1DataGrid控件的clearstyle技术,网格的颜色,网格的滚动条,和交替行的背景网格的所有更改以

DataGrid for WPF 帮助文档

46

反映绿色背景。 高亮显示网格中的一个项目,并注意到鼠标悬停样式并没有更改;如果您选择,您可以自定义这些样 式。 看到改变网格的鼠标悬停样式(第1.3.18.7.3章节)详情。

1.3.18.7.2 移除网格的交替行颜色
WPF DataGrid默认出现交替行颜色。 交替行颜色是在不同颜色中出现的替代线,而不是网格的基色。 这有助于使行更 容易跨网格,但如果你选择的话,你可以通过删除的交替行颜色显示网格的统一外观。

在设计时
要清除交替行颜色,设置为白色,完成下列步骤: 1. 2. 3. 4. 5. 点击C1DataGrid控件一次并选择它。 在“属性”窗口中,单击旁边的下拉箭头RowBackground属性。 点击下拉箭头的方块中的十六进制代码出现,并选择白色。 在“属性”窗口中,单击旁边的下拉箭头AlternatingRowBackground属性。 点击下拉箭头的方块中的十六进制代码出现,并选择白色。

在XAML
除去交替行颜色和设置它,所以所有的行出现白色,添加RowBackground =“white” AlternatingRowBackground =“White”到< C1:c1datagrid >标签使其出现类似下面的: <c1:C1DataGrid Name="c1datagrid1" Height="180" Width="250" RowBackground="White" AlternatingRowBackground="White" />

在代码中
要清除交替的行颜色,设置为白色,将下面的代码添加到您的项目中: Visual Basic Me.C1DataGrid1.RowBackground = New System.Windows.Media.SolidColorBrush(Colors.White) Me.C1DataGrid1.AlternatingRowBackground = New System.Windows.Media.SolidColorBrush(Colors.White)

C# this.c1DataGrid1.RowBackground = new System.Windows.Media. SolidColorBrush(Colors.White); this.c1DataGrid1.AlternatingRowBackground = new System.Windows.Media. SolidColorBrush(Colors.White); 你所完成的 运行应用程序,并观察到网格中的所有行现在都是白色的。

1.3.18.7.3 改变网格的鼠标悬停样式
默认情况下,列和行上鼠标滑过出现在不同的颜色来提示用户哪些是它们与网格交互的区域。 如果你选择你可以自定 义鼠标滑过的单元格外观。 例如,您可能想要高亮这些单元格,甚至更多的或删除此效果。

DataGrid for WPF 帮助文档
在设计时
要将鼠标悬浮效果设置为黄色,完成以下步骤: 1. 点击C1DataGrid控件一次并选择它。 2. 导航到“属性”窗口中,单击紧邻MouseOverBrush属性旁边的下拉箭头。 3. 点击下拉箭头的方块中的十六进制代码出现,并选择黄色。

47

在XAML
设置鼠标悬浮效果为黄色,加MouseOverBrush =“Yellow”到<c1:C1DataGrid>标签使其出现类似下面的: <c1:C1DataGrid Name="c1datagrid1" Height="180" Width="250" MouseOverBrush="Yellow" />

在代码中
要将鼠标设置为黄色,请将以下代码添加到项目中: Visual Basic Me.c1datagrid1.MouseOverBrush = New System.Windows.Media.SolidColorBrush(Colors.Yellow)

C# this.c1datagrid1.MouseOverBrush = new System.Windows.Media.SolidColorBrush(Colors.Yellow);

你所完成的
运行该应用程序,并观察到网格中所有高亮行和列都出现黄色。

1.3.18.7.4 改变网格的字体样式
当控件运行时你可能需要更新出现在WPF DataGrid的字体。 例如,您可能希望更改网格的样式,其中一个元素是字体 样式,以匹配您的应用程序的外观。

在设计时
要更改字体样式,完成下列步骤: 1. 点击C1DataGrid控件一次并选择它。 2. 导航到“属性”窗口中,单击下拉箭头旁边的FontFamily属性并选择宋体。 3. 导航到“属性”窗口中,单击“下一步”的字体属性的下拉箭头并选择10。

在XAML

DataGrid for WPF 帮助文档

48

要更改字体样式,添加FontFamily="Times New Roman" FontSize="10"到<c1:C1DataGrid>标签使其出现类似下面的: <c1:C1DataGrid Name="c1datagrid1" Height="180" Width="250" FontFamily="Times New Roman" FontSize="10" />

在代码中
要清除交替的行颜色,设置为白色,将下面的代码添加到您的项目中: Visual Basic Me.c1datagrid1.FontFamily = New FontFamily("Times New Roman") Me.c1datagrid1.FontSize = 10

C# this.c1datagrid1.FontFamily = new FontFamily("Times New Roman"); this.c1datagrid1.FontSize = 10; 你所完成的 运行应用程序,并观察到在网格中的所有行出现在新的罗马字体。

1.4 运行时间迭代
下面高亮的图片可能是WPF控件DataGrid运行时的相互作用:

以下主题详细介绍了这些运行时功能,包括筛选、排序和分组数据。

1.5 选择模式

DataGrid for WPF 帮助文档

49

你可以通过设置选择模型属性置网格的模式选择行为。 你可以改变用户如何与网格交互,但设置选择模型属性设置为 为以下值之一:

属性 None SingleCell SingleRow SingleColumn SingleRange MultiRow (Default) MultiColumn MultiRange

描述 用户不能选择任何项目。 用户只能选择一个单元格。 用户只能选择单行一次。 用户只能在一个时间选择一个列。 用户只能在一个时间选择一个单元格区域。 (一个范围是由两个单元格分隔的矩形) 用户可以选择多行,同时按住相应的修改键。 用户可以选择多个列,同时按住相应的修改键。 用户可以选择多个单元格的范围,同时按住相应的修改键。

关于修改键和多行选项的更多信息,见多行选择(第1.3.14.3章节)的话题。

1.5.1 自定义自动生成的列
您可以自定义列,即使是自动生成的列。 如果AutoGenerateColumns属性设置为true,列是自动生成的,你可以通过 C1DataGrid.AutoGeneratingColumn事件处理自定义生成的列显示在代码中。

添加AutoGeneratingColumn事件处理程序
完成以下步骤来添加AutoGeneratingColumn事件处理程序: 1. 切换到代码视图,为AutoGeneratingColumn事件添加事件处理程序,例如: Visual Basic Private Sub C1DataGrid1_AutoGeneratingColumn(ByVal sender As System.Object, ByVal e As C1.WPF.DataGrid.DataGridAutoGeneratingColumnEventArgs) Handles C1DataGrid1.AutoGeneratingColumn ' 在此处添加代码。 End Sub C# private void C1DataGrid1_AutoGeneratingColumn(object sender, C1.WPF.DataGrid.DataGridAutoGeneratingColumnEventArgs e) { // 在此处添加代码。 } 2. 切换到源视图并添加C1DataGrid 控件的实例事件处理程序,例如: <c1:C1DataGrid x:Name="c1DataGrid1" AutoGenerateColumns="True" AutoGeneratingColumn=" c1DataGrid1_AutoGeneratingColumn"></c1:C1DataGrid> 现在你可以将代码添加到AutoGeneratingColumn事件处理程序以自定义自动生成的列的外观和行为。 下面是自

DataGrid for WPF 帮助文档
定义列格式和行为的例子。

50

取消列生成
你可以取消在AutoGeneratingColumn事件中产生的特定的列。 例如,你可以使用下面的代码来取消网格中的布尔列的 生成:

Visual Basic <c1:C1DataGrid x:Name="c1DataGrid1" AutoGenerateColumns="True" AutoGeneratingColumn=" " Private Sub C1DataGrid1_AutoGeneratingColumn(ByVal sender As System.Object, ByVal e As C1.WPF.DataGrid.DataGridAutoGeneratingColumnEventArgs) Handles C1DataGrid1.AutoGeneratingColumn ' 取消所有布尔列的自动生成。 If e.Property.PropertyType Is GetType(Boolean) Then e.Cancel = True End If End Sub C# private void c1DataGrid1_AutoGeneratingColumn(object sender, C1.WPF.DataGrid.DataGridAutoGeneratingColumnEventArgs e) { // 取消所有布尔列的自动生成。 if (e.Property.PropertyType == typeof(bool)) e.Cancel = true; }

更改列标题
在AutoGeneratingColumn事件中你可以更改出现在标题自动生成的列的文本。 例如,你可以改变“产品名称”栏,以便 它与“名称”标题通过使用下面的代码出现: Visual Basic Private Sub C1DataGrid1_AutoGeneratingColumn(ByVal sender As System.Object, ByVal e As C1.WPF.DataGrid.DataGridAutoGeneratingColumnEventArgs) Handles C1DataGrid1.AutoGeneratingColumn ' 修改“产品名称”列标头 If e.Column.Header.ToString() = "ProductName" Then e.Header = "Name" End If End Sub C# private void c1DataGrid1_AutoGeneratingColumn(object sender, C1.WPF.DataGrid.DataGridAutoGeneratingColumnEventArgs e)

DataGrid for WPF 帮助文档
{ // 修改“产品名称”列标头 if (e.Column.Header.ToString() == "ProductName") e.Column.Header = "Name"; }

51

阻止列之间的相互作用
使用AutoGeneratingColumn事件你可以改变最终用户如何与特定的生成的列的互动。 例如,您可以阻止用户从以下代 码移动只读列: Visual Basic Private Sub C1DataGrid1_AutoGeneratingColumn(ByVal sender As System.Object, ByVal e As C1.WPF.DataGrid.DataGridAutoGeneratingColumnEventArgs) Handles C1DataGrid1.AutoGeneratingColumn ' 修改“产品名称”列标头 If e.Column.IsReadOnly = True Then e.Column.CanUserMove = False End If End Sub C# private void c1DataGrid1_AutoGeneratingColumn(object sender, C1.WPF.DataGrid.DataGridAutoGeneratingColumnEventArgs e) { // 修改“产品名称”列标头 if (e.Column.IsReadOnly == true) e.Column.CanUserMove = false; }

1.6 基于任务的帮助
以下任务的帮助主题假定您熟悉Visual Studio和Expression Blend和知道如何在一般中使用C1DataGrid控件。 如果你不 熟悉WPF DataGrid和Silverlight的数据,请参阅快速启动的第一。 本节中的各主题提供了使用C1DataGrid 产品特定任务的解决方案。 大多数任务的帮助主题还假设您已经创建了一个新 的WPF或者Silverlight项目并添加一个C1DataGrid控件项目–有关创建的控制信息,请参见创建一个DataGrid(第1.6.1章 节)。

1.6.1 创建数据网格
你可以很容易地创建C1DataGrid控件在Expression Blend,在XAML和在代码的设计时。 请注意,如果您根据以下步骤 创建了一个C1DataGrid控件,它会出现空。 您将需要绑定网格或用数据填充它。

在Blend的设计时
在Blend中创建一个C1DataGrid控件,完成以下步骤: 1. 导航到“项目”窗口中,右键单击“项目文件”列表中的“引用”文件夹。 在上下文菜单中选择“添加引用,找到并选择

DataGrid for WPF 帮助文档
2. 3. 4. 5. 6.

52

c1.wpf.datagrid.dll组件,然后单击“打开”。该对话框将关闭,并且将添加到您的项目中,并且该控件将在资产库 中提供。 在“工具箱”中,单击“资产”按钮(“双图标”图标)打开“资产”对话框。 在资产库”对话框,在左窗格中选择控件项,然后单击右窗格中的C1DataGrid图标:C1DataGrid图标将在资产按 钮底下的工具箱中出现。 点击一次用户控件设计区域并选择它。 不像在Visual Studio中,Blend可以添加WPF控件直接设计表面作为下一 步。 双击工具箱中的C1DataGrid图标添加控件到面板上。 C1DataGrid控件在您的应用程序中将存在。 如果您选择,可以通过在属性窗口中选择和设置属性来进行自定义的控制。 例如,设置c1datagrid控件的名称 属性为“c1datagrid1”高度属性为“180”,和宽度属性“250”。

在XAML
使用XAML标记创建一个c1datagrid控件,完成以下步骤: 1. 在“可视化工作室解决方案资源管理器”中,右键单击“项目文件”列表中的“引用”文件夹。 在上下文菜单中选择“添 加引用,选择c1.wpf.datagrid.dll组件,并单击“确定”。 2. 通过xmlns:c1="http://schemas.componentone.com/winfx/2006/xaml向添加项目中添加一个XAML命名空间并初 始化<UserControl> <Window>标签。 它将出现类似以下: XAML <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:c1="http://schemas.componentone.com/winfx/2006/xaml" x:Class="C1DataGrid.MainWindow" Width="640" Height="480"><UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:c1="http://schemas.componentone.com/winfx/2006/xaml x:Class="C1DataGrid.MainPage" Width="640" Height="480"> 3. 添加一个<c1:C1DataGrid>标签到你的项目中的<Grid>标签来创建一个C1DataGrid 控制。 标记将出现类似以 下: XAML <Grid x:Name="LayoutRoot" Background="White"> <c1:C1DataGrid Name="c1datagrid1" Height="180" Width="250" /> </Grid> 这个标记将创建一个空的c1datagrid控件命名为“c1datagrid1”并设置控件的大小。

在代码中
在代码中创建一个c1datagrid控件,完成以下步骤: 1. 在“可视化工作室解决方案资源管理器”中,右键单击“项目文件”列表中的“引用”文件夹。 在上下文菜单中选择“添 加引用,选择c1.wpf.dll和c1.wpf.datagrid.dll组件,并单击“确定”。 2. 右键单击mainpage.xamlmainwindow.xaml窗口内选择“查看代码,切换到代码视图 3. 向页面顶部添加下面的导入语句: Visual Basic

DataGrid for WPF 帮助文档
Imports C1.WPF|variable=WPF.DataGrid C# using C1.WPF|variable=WPF.DataGrid; 将代码添加到页面的构造函数来创建c1datagrid控件。 它将看起来类似以下: Visual Basic Public Sub New() InitializeComponent() Dim c1datagrid1 As New C1DataGrid c1datagrid1.Height = 180 c1datagrid1.Width = 250 LayoutRoot.Children.Add(c1datagrid1) End Sub

53

C# public MainPage() { InitializeComponent(); C1DataGrid c1datagrid1 = new C1DataGrid(); c1datagrid1.Height = 180; c1datagrid1.Width = 250; LayoutRoot.Children.Add(c1datagrid1); } 此代码将创建一个空的c1datagrid控件命名为“c1datagrid1”,设置控件的大小,并在页面中添加控件。

你所完成的
运行应用程序并观察你已经创造了一个c1datagrid控件。 注意:当你创建一个c1datagrid控件在上述步骤,会出现空。 您可以将项目添加到可以在运行时进行交互的控件中。


相关文章:
ComponentOne DataGrid for WPF基础教程:基础介绍.pdf
暂无评价|0人阅读|0次下载 | 举报文档 ComponentOne DataGrid for WPF基础教程:基础介绍_互联网_IT/计算机_专业资料。本篇文章,我们将系统的介绍C1DataGrid for ...
ComponentOne WPF平台下的C1DataGrid与C1FlexGrid对比.pdf
ComponentOne WPF平台下的C1DataGrid与C1FlexGrid对比_计算机软件及应用_IT/计算机...下的区别: 在 C1FlexGrid for silverlight,大量的根节点的内容和旧版 本一致...
ComponentOne WPF平台Grid控件性能比较.pdf
C1FlexGrid 4.4.0.20162.514 (ComponentOne WPF 版) ? C1DataGrid 4.4.0....DataGridControl v5.9.5.9.16204.15420 (Xceed DataGrid for WPF) 这个基准...
ComponentOne FlexGrid for Winforms 导出到 PDF 文件.pdf
暂无评价|0人阅读|0次下载|举报文档ComponentOne FlexGrid for Winforms 导出到 PDF 文件_互联网_IT/计算机_专业资料。ComponentOne FlexGrid for Winforms 导出到...
ComponentOne安装使用指南--控件使用(二).pdf
安装产品后,可以在如下路径找到相关引用: 64 位:C:\Program Files (x86)\ComponentOne\Studio for WinForms\bin\v4.0 32 位:C:\Program Files \ComponentOne...
WPF ComponentOneFlexGrid设置样式技巧:(一)单元格设置....pdf
暂无评价|0人阅读|0次下载|举报文档WPF ComponentOneFlexG
简单的DataGrid控件在WPF中绑定List集合数据.doc
暂无评价|0人阅读|0次下载 | 举报文档 简单的DataGrid控件在WPF中绑定List集合数据_计算机软件及应用_IT/计算机_专业资料。简单的 DataGrid 控件在<WPF>中绑定 Lis...
ComponentOneReport:使用NorthWind数据库展示数据.pdf
暂无评价|0人阅读|0次下载 | 举报文档 ComponentOneReport
ComponentOne使用教程:C1Theme:让您的应用系统更加炫彩....pdf
暂无评价|0人阅读|0次下载 | 举报文档 ComponentOne使用教程:C1Theme:让您的应用...在今后使用 ComponentOne Studio for WinForms 为用户创造功能 全面的桌面应用的...
WPF DataGrid Style.doc
享专业文档下载特权 赠共享文档下载特权 100W篇文档免费...--DataGrid --> and template for the resize...ComponentOne DataGrid ... 4页 免费 wpf自定义...
WPF中DATAGRID导出EXCEL.pdf
暂无评价|0人阅读|0次下载 | 举报文档 WPFDATAGRID导出EXCEL_电子/电路_工程科技_专业资料。工作中需要将 DataGrid 中的数据导出到 Excel,从网上查了很多资料,...
JQuery DataGrid 中文文档.doc
JQuery DataGrid 中文文档 JQuery DataGrid 的例子在...config object, see column properties for more ...Select boolean True to allow selecting only one ...
ComponentOne WinForms Barcode入门教程.pdf
ComponentOne WinForms Barcode入门教程_互联网_IT/计算机_专业资料。本文档讲解了...=CodeTypeEnum.UpcE; } 你刚刚完成 ComponentOne BarCode for WinForms 快速...
WPF中DataGrid导出Excel.doc
暂无评价|0人阅读|0次下载 | 举报文档 WPFDataGrid导出Excel_计算机软件及应用...5. 6. List cells = new List(header.Length); for (int j = 0; j <...
WPF_Studio控件介绍-6寸.pdf
DataGrid Contrib 和 Actipro Editors/DataGrid ...a) 实现停靠和多文档显示的功能 b) 可随意...四、ComponentOne Studio for WPF 2010 v1 ...
WPF_Studio控件介绍.doc
文档介绍了WPF Studio中12个功能强大的子控件...DataGrid Contrib 和 Actipro Editors/DataGrid ...四、ComponentOne Studio for WPF 2010 v1 ...
DataGrid用法解析.doc
{Binding EmployeeID,Mode=OneWay}" /><!--该列...{ InitializeComponent(); PagedCollectionViewpcv = ...喜欢此文档的还喜欢 DataGridView控件用法合... ...
Silverlight交流_图文.ppt
(WPF) 的功能,并通过结合音视频、 动画、交互以及...(可以认为是.Net FrameWork的缩减版)到指定 的路径...AgDataGridDemos/ ComponentOne-Studio for Silverlight...
SEAL Common Core Libraries and Services for LHC App....pdf
SEAL Common Core Libraries and Services for LHC ...ROOT GEANT4 FLUKA MySQL DataGrid Python Qt ......One of the initial activities has been an ...
更多相关标签: