[原创][学习笔记][WinForm]MSDN中的WinForm控件学习
一. WinForm控件:BackgroundWorker 组件
(多线程专题中再做整理)
二.WinForm控件:BindingNavigator 控件
1.概述
用于提供一个UI来导航和操作数据,所以通常和BindingSource一起使用,实现在数据记录中的移动和交互,由 ToolStrip 和一系列 ToolStripItem 对象组成,默认的每个控件在BindingSource中都有一个方法与之对应
2.常用操作
UI 控件 |
BindingNavigator 成员 |
|
移到最前 |
||
前移一步 |
||
当前位置 |
||
计数 |
||
移到下一条记录 |
||
移到最后 |
||
新添 |
||
删除 |
三.WinForm控件:BindingSource 组件
1.概述
该控件有两功能:
1.数据导管:实现连接窗体上控件与数据的中间层(BindingSource绑定到数据源+BindingSource绑定到控件)
2.数据源:强类型数据源.Add()向组件添加类型会创建一个该类型的列表
2.常用操作
1)作为数据导管(媒介):
连接数据库:DataSource属性填入DataSet,DataMember属性填入该DataSet的某个表
2)作为数据源
没有添加表就将数据项加入BindingSource,则将其作为数据源
3)数据操作
成员 |
说明 |
Current 属性 |
获取数据源的当前项。 |
Position 属性 |
获取或设置基础列表中的当前位置。 |
List 属性 |
获取 DataSource 计算和 DataMember 计算列表。如果未设置 DataMember,则返回由 DataSource 指定的列表。 |
Insert 方法 |
将项插入列表的指定索引处。 |
RemoveCurrent 方法 |
从列表中移除当前项。 |
EndEdit 方法 |
将挂起的更改应用于基础数据源。 |
CancelEdit 方法 |
取消当前的编辑操作。 |
AddNew 方法 |
在基础列表中添加一个新项。如果数据源实现了 IBindingList 并从 AddingNew 事件返回一个项,则添加该项。否则,请求将被传递到列表的 AddNew 方法。如果基础列表不是一个 IBindingList,会通过它的公共默认构造函数自动创建该项。 |
4)排序和过滤
通常应使用排序的或过滤的数据源视图。下表显示 BindingSource 组件数据源提供的成员。
成员 |
说明 |
Sort 属性 |
如果数据源为 IBindingList,则获取或设置用于排序和排序顺序信息的列名。如果数据源为 IBindingListView,并支持高级排序,则获取用于排序和排序顺序信息的多个列名。 |
Filter 属性 |
如果数据源是 IBindingListView,则会获取或设置用于过滤所查看行的表达式。 |
3.高级主题:BindingSource 的组件结构(优势功能)
基于以下功能,使得BindingSource成为Windows控件绑定到数据源的最佳方式
1)间接寻址
BindingSource 组件在控件与数据源之间提供了一个间接寻址级别。控件不是直接绑定到数据源,而是先将控件绑定到 BindingSource,然后再将数据源附加到该 BindingSource 组件的 DataSource 属性。
因此,提供了以下功能
- 在保留当前的控件绑定的同时,可以将 BindingSource 附加到不同的数据源。
- 可以更改数据源中的项并通知绑定控件。通过调用ResetBindings方法使所有绑定数据源的控件更新数据源,参数为ResetBindings(true)数据源架构发生改变,参数为ResetBindings(false)仅数据发生改变
- 可以绑定到 Type(通过TypeOf(OneClass)),而不是绑定到内存中的某个对象。这样的话,在调用数据时,系统会自动添加一个新的对象。 实例:如何:将 Windows 窗体控件绑定到类型
- 当前项管理
下列为常用方法
CurrencyManager 属性 |
获取与 BindingSource 关联的货币管理器。 |
GetRelatedCurrencyManager 方法 |
CurrencyManager GetRelatedCurrencyManager( |
Current 属性 |
获取数据源的当前项。 |
Position 属性 |
获取或设置基础列表中的当前位置。 |
EndEdit 方法 |
将挂起的更改应用于基础数据源。 |
CancelEdit 方法 |
取消当前的编辑操作 |
- 作为列表的数据源
接口整理
ms-help://MS.MSDNQTR.v90.chs/dv_fxmclictl/html/7bc69c90-8a11-48b1-9336-3adab5b41591.htm
4) 作为 IBindingList 的 BindingSource
BindingSource 组件提供成员,以访问和操作作为 IBindingList 的基础数据。
成员 |
说明 |
List 属性 |
获取 DataSource 或 DataMember 属性的计算结果的列表。 |
AddNew 方法 |
在基础列表中添加一个新项。应用于满足以下两个条件的数据源:实现 IBindingList 接口并允许添加项(即 AllowNew 属性被设置为 true)。 |
5) 创建自定义项
可以处理 AddingNew 事件,以提供自己的项创建逻辑。AddingNew 事件在新对象添加到 BindingSource 之前发生。此事件在调用 AddNew 方法之后、新项目添加到基础列表之前引发。通过处理此事件,您可以提供自定义项创建行为,而无需从 BindingSource 类派生。
6) 创建事务性项
BindingSource 组件实现 ICancelAddNew 接口,从而启用事务性项的创建。通过调用 AddNew 临时创建一个新项之后,可以采用下列方式提交或回滚该添加项:
- EndNew 方法显式提交挂起的新项。
- 执行其他集合操作(如插入、移除或移动)隐式提交挂起的新项。
- 如果尚未提交 CancelNew 方法,则此方法将回滚挂起的新项。
7) Ienumerable 支持
BindingSource 组件启用控件到 IEnumerable 数据源的绑定。使用此组件可以绑定到某个数据源,如 System.Data.SqlClient.SqlDataReader。
将 IEnumerable 数据源分配给 BindingSource 组件以后,BindingSource 将创建一个 IBindingList,并将 IEnumerable 数据源的内容添加到列表中。
8)静态 ListBindingHelper 方法
System.Windows.Forms.BindingContext、System.Windows.Forms.CurrencyManager 和 BindingSource 类型共享公共逻辑,以便根据 DataSource/DataMember 对生成列表。此外,将公开此公共逻辑,以供控件作者和其他第三方在下列 static 方法中使用:
- GetListItemProperties
- GetList.
- GetListName
- GetListItemType
9)使用 IBindingListView 接口进行排序和筛选
BindingSource 组件实现了 IBindingListView 接口,从而扩展了 IBindingList 接口。IBindingList 提供单个列排序,而 IBindingListView 提供高级排序和筛选。如果数据源也实现这些接口中的一个,则您可以使用 IBindingListView 对数据源中的项进行排序和筛选。BindingSource 组件不提供这些成员的引用实现,而是将调用转发给基础列表。
下表描述用于排序和筛选的属性。
成员 |
说明 |
Filter 属性 |
如果数据源是 IBindingListView,则获取或设置用于筛选要查看的行的表达式。 |
Sort 属性 |
如果数据源为 IBindingList,则获取或设置用于排序和排序顺序信息的列名。 - 或 - 如果数据源为 IBindingListView 并且支持高级排序,则获取用于排序和排序顺序的多个列名。 |
四.WinForm控件:Button控件
1.概述:
Button允许通过单击来执行操作,其可以显示文本和图片,被单击时有按下效果。
2.常用操作:
1)某Button具有焦点时,可以通过单击和Enter来触发事件
2)ShowDialog显示一个窗体时,可以使用按钮的DialogResult属性指定ShowDialog的返回值。
3)设置 DialogResult 属性将引起对话框自动关闭,但仍可处理控件的 Click 事件,而且对话框在事件处理程序的代码完成后立即关闭。
4)阻止窗口关闭:可以在Closing中设置DialogResult的值为None
五.WinForm控件:CheckBox控件
1.概述
用于指示某条件是打开还是关闭的。可以成组使用CheckBox来构成复选框,可以从中选择一个或多个
2.常用操作
1)Checked属性:返回True 或False
2)CheckState属性:返回Checked或Unchecked,当ThreeStatus选中时,可以返回Indeterminate(不确定状态,并变灰)
六.WinForm控件:CheckedListBox控件
1.概述:
与ListBox类似,但每一项都有一个CheckBox选项框,可以使用Items属性。
2.常用操作:
1.Items常用操作:
1 |
Add |
添加对象 |
ObjectCollection.Items.Add("Tokyo"); |
2 |
Insert |
插入对象 |
ObjectCollection.Items.Insert(0, "Copenhagen"); |
3 |
AddRange |
分配数组 |
Object[] ItemObject = new Object[10]; |
4 |
RemoveAt |
删除 |
comboBox1.Items.RemoveAt(0); |
5 |
Remove |
删除 |
comboBox1.Items.Remove(comboBox1.SelectedItem) |
|
Remove |
删除 |
comboBox1.Items.Remove("Tokyo"); |
6 |
Clear |
清空 |
listBox1.Items.Clear(); |
七.WinForm控件:ColorDialog 组件
1.概述
预先配置的一个对话框,可以从中选择出要选择的颜色。
2.常用操作
1.Color属性返回选择的颜色
2.AllowFullOpen为False时,禁止自定义颜色
3.SolidColorOnly控制是否纯色。
4.调用对话框,调用ShowDialog方法
5.ShowHelp为True时,点击窗口上的帮助会引发HelpRequest事件。
八.WinForm控件:ComboBox组件
1.概述
在下拉式组合框中显示一项数据。顶部为允许键入的列表框,右侧有一个选择列表框。
2.常见操作:
1.SelectedIndex可以设置或者返回所选定的项,未选中项时为-1,第一项为0.
2.SelectedItem 属性返回项本身
3.Count属性 返回项数
4.Items属性操作见 CheckListBox控件->常见操作->Items常见操作
5.BeginUpdate 和 EndUpdate 方法:再一次次添加时使用这个可以维持性能。
6.在列表中搜索包含特定搜索字符串的项:FingString:查找 ComboBox 中以指定字符串开始的第一个项
FindStringExact:查找与指定字符串完全匹配的项。
九.WinForm控件:ContextMenu 组件(已过时,因向后兼容而保留)
1.概述
右键快捷菜单的子项
2.常见操作
参阅MSDN
十.WinForm控件:ContextMenuStrip 控件
1.概述:
ContextMenuStrip 控件提供了与某个控件关联的快捷菜单。
2.常见操作:
1.ContextMenuStrip重要的伴随类
类 |
说明 |
ToolStripMenuItem |
表示显示在 MenuStrip 或 ContextMenuStrip 中的一个可选选项。 |
ToolStripDropDown |
表示使用户能从列表中选择单个项的控件,该列表在用户单击 ToolStripDropDownButton 或更高级菜单项时显示。 |
ToolStripDropDownItem |
为派生自 ToolStripItem 的控件提供基本功能,单击这些控件会显示下拉项。 |
2. 将 ContextMenuStrip 与控件关联
将控件或窗体的ContextMenuStrip设为ContextMenuStrip的名称
3.向 ContextMenuStrip 添加菜单项
一次只能向 ContextMenuStrip 添加一个或几个菜单项。
- this.contextMenuStrip1.Items.Add(toolStripMenuItem1);
- this.contextMenuStrip1.Items.AddRange(new
System.Windows.Forms.ToolStripItem[] {
this.toolStripMenuItem1, this.toolStripMenuItem2});
十一.WinForm控件:DataGrid控件(已过时,为向后兼容而保留)
十二.WinForm控件:DataGridView 控件
1.概述
显示和编辑表格数据提供了灵活、可扩展的系统,可以显示和编辑来自多种不同类型的数据源的表格数据。
2.常见操作
1.绑定数据:
设置DataSource到数据源,DataMember到绑定的表(多的表的话)即可
该控件支持Windows窗口绑定类型,所以支持以下类型:
实现IList接口的类 |
一维数组 |
实现IListSource接口的类 |
DataTable,DataSet |
实现IBindingList接口的类 |
BindingList<T> |
实现IBindingListView接口的类 |
BindingSource |
2.默认功能
MDSN it Windows 窗体 DataGridView 控件中的默认功能
ms-help://MS.MSDNQTR.v90.chs/dv_fxmclictl/html/4405f697-cad1-4839-9bcd-8ddb09d9f00e.htm
3.高级主题:DataGridView 控件结构
主要的 DataGridView 伴生类从 DataGridViewElement 派生,详细继承关系:
DataGridViewElement 对象模型
1)DataGridViewElement
常用属性
名称 |
说明 |
|
|
获取与此元素关联的 DataGridView 控件。 | |
|
获取元素的用户界面 (UI) 状态。 |
State为一个DataGridViewElementStates 枚举(可通过按位与操作符选中多个状态)
员名称 |
说明 |
|
|
None |
指示元素处于它的默认状态。 |
|
Displayed |
指示元素当前显示在屏幕上。 |
|
Frozen |
指示不能通过 UI 滚动元素。 |
|
ReadOnly |
指示元素不会接受用户输入来更改它的值。 |
|
Resizable |
指示可以通过 UI 来调整元素大小。除非该值与 ResizableSet 值结合,否则会忽略该值。 |
|
ResizableSet |
指示元素没有继承其父级的大小可调状态。 |
|
Selected |
指示元素处于选定的(突出显示的)UI 状态。 |
|
Visible |
指示元素可见(可显示)。 |
2)DataGridViewCell常用属性
DataGridViewCell为单元格最基本单位,通过使用 DataGridViewRow 类的 Cells,SelectedCells 集合可以访问单元格
常用属性:
名称 |
说明 |
|
获取此单元格的列索引。 | ||
|
获取环绕单元格内容区域的边框。 | |
|
获取或设置与单元格关联的快捷菜单。 | |
|
获取新记录所在行中单元格的默认值。 | |
|
获取一个值,该值指示当前该单元格是否显示在屏幕上。 | |
|
获取为显示进行格式化的单元格的值。 | |
|
获取与该单元格关联的格式化值的类型。 | |
|
获取指示单元格是否已被冻结的值。 | |
|
获取指示是否已设置 Style 属性的值。 | |
|
获取该单元格从它的行和列的状态继承后的当前状态。 | |
|
获取当前应用于单元格的样式。 | |
|
获取一个值,该值指示此单元格当前是否处于编辑状态。 | |
|
获取包含此单元格的列。 | |
|
获取包含此单元格的行。 | |
|
获取适合该单元格的矩形区域的大小(以像素为单位)。 | |
|
获取或设置一个值,该值表示是否可以编辑该单元格的数据。 | |
|
获取单元格父行的索引。 | |
|
获取或设置一个值,该值指示是否已选定该单元格。 | |
|
获取单元格的大小。 | |
|
获取或设置单元格的样式。 | |
|
获取或设置与此单元格关联的 ToolTip 文本。 | |
|
获取或设置与此单元格关联的值。 | |
|
获取或设置单元格中值的数据类型。 | |
|
获取一个值,该值指示单元格是否位于已隐藏的行或列中。 |
3)DataGridViewBand常用属性
|
名称 |
说明 |
|
获取或设置带区的快捷菜单。 | |
|
获取或设置带区的默认单元格样式。 | |
|
获取或设置默认标题单元格的运行时类型。 | |
|
获取一个值,该值指示带区当前是否显示在屏幕上。 | |
|
获取或设置一个值,该值指示当用户滚动 DataGridView 时带区是否移动。 | |
|
获取一个值,该值指示是否已设置 DefaultCellStyle 属性。 | |
|
获取或设置 DataGridViewBand 的标题单元格。 | |
|
获取带区在 DataGridView 控件中的相对位置。 | |
|
获取对于当前带区有效的单元格样式(考虑样式继承)。 | |
|
获取一个值,该值指示带区是否表示一个行。 | |
|
获取或设置一个值,该值指示用户是否可以编辑带区的单元格。 | |
|
获取或设置一个值,该值指示是否可以在用户界面 (UI) 中调整带区的大小。 | |
|
获取或设置一个值,该值指示带区是否为被选定。 | |
|
获取或设置一个值,该值指示带区对于用户是否可见。 |
4)DataGridViewColumn
1.DataGridViewColumn类表示 DataGridView 控件中的逻辑列。可以通过控件的 Columns 集合来检索列
可以使用 Columns,SelectedColumns 集合访问 DataGridView 控件的列
DataGridViewColumn 对象模型
2.DataGridViewColumn 主要用于调整列用户界面 (UI) 的外观和行为,如列宽和单元格样式
3.常用属性
|
名称 |
说明 |
|
获取或设置模式,通过此模式列可以自动调整其宽度。 | |
|
获取或设置用于创建新单元格的模板。 | |
|
获取单元格模板的运行时类型。 | |
|
获取或设置数据源属性的名称或与 DataGridViewColumn 绑定的数据库列的名称。 | |
|
相对于当前所显示各列,获取或设置列的显示顺序。 | |
|
获取或设置列分隔符的宽度(以像素为单位)。 | |
|
获取或设置一个值,表示当该列处于填充模式时,相对于控件中处于填充模式的其他列的宽度。 | |
|
获取或设置表示列标题的 DataGridViewColumnHeaderCell。 | |
|
获取或设置 DataGridViewBand 的标题单元格。 (继承自 DataGridViewBand。) | |
|
获取或设置列标题单元格的标题文本。 | |
|
获取对该列有效的缩放模式。 | |
|
获取一个值,指示该列是否绑定到某个数据源。 | |
|
获取或设置列的最小宽度(以像素为单位)。 | |
|
获取或设置列名称。 | |
|
获取或设置列的站点。 | |
|
获取或设置列的排序模式。 | |
|
获取或设置用于工具提示的文本。 | |
|
获取或设置列单元格中值的数据类型。 | |
|
获取或设置列的当前宽度。 |
5)DataGridRows
1.DataGridViewRow 对象模型
2.常见成员:
|
名称 |
说明 |
获取用于填充行的单元格集合。 | ||
获取或设置行的快捷菜单。 (重写 DataGridViewBand.ContextMenuStrip。) | ||
获取用于填充行的数据绑定对象。 | ||
获取或设置行分隔符的高度(以像素为单位)。 | ||
获取或设置行级别错误的错误消息文本。 | ||
获取或设置行的标头单元格。 | ||
获取或设置行的当前高度。 | ||
获取一个指示行是否为用于新纪录的行的值。 | ||
获取或设置行的最小高度。 |
3.备注:
DataGridViewRow 类表示 DataGridView 控件中的行。可以通过控件的 Rows 和 SelectedRows 集合检索行。
与 DataGridViewColumn 不同的是,DataGridViewRow 实际上包含该行中的所有单元格的集合。可以通过 Cells 属性访问此集合。
DataGridViewRow 类可用来访问单个的单元格元素,还可以用来调整行 UI 的外观和行为,例如高度和单元格样式。通常,您会希望控件中的所有行或大多数行共享相同的特性。若要为控件中的所有行设置单元格样式,请设置由 DataGridView.RowsDefaultCellStyle 属性返回的对象的属性。若要设置交替行的样式,请使用 DataGridView.AlternatingRowsDefaultCellStyle 属性,也可以使用 DataGridView.RowTemplate 属性来定义将作为添加到控件的所有行的基础的行。
DataGridView 控件的AllowUserToAddRows 属性,则将会在最后一行显示一个用于添加新行的特殊行。
4.在 Windows 窗体 DataGridView 控件中使用新记录行:
1)显示新记录行:
控件的 AllowUserToAddRows 属性和数据源的 IBindingList.AllowNew 属性均为 true,则将显示新记录行。
2)用默认数据填充新记录行:
当用户选择新记录行作为当前行时,DataGridView 控件引发 DefaultValuesNeeded 事件,此事件提供对新 DataGridViewRow 的访问。
3)行集合
新记录行包含在 DataGridView 控件的 Rows 集合中,但在两个方面具有不同的行为:
1.不能以编程方式将新记录行从 Rows 集合中移除。
2.不能在新记录行之后添加任何行,新记录行总是 DataGridView 控件中的最后一行 DataGridViewRowCollection 中添加行的方法(Add、AddCopy 和 AddCopies)都在内部调用插入方法。
4)新记录行的视觉自定义
1.创建新记录行时,新记录行基于由 RowTemplate 属性指定的行.
2.新记录行中的单元格显示的初始值是从每个单元格的 DefaultNewRowValue 属性检索得到的。对于类 型为 DataGridViewImageCell 的单元格,此属性返回一个占位符图像。对于其他类型的单元格,此属性返回 null。可以重写此属性以返回自定义值。但是,当焦点进入新记录行时,这些初始值可以被 DefaultValuesNeeded 事件处理程序替换。
4.高级主题:DataGridView 较 DataGrid 的技术优势
1.下表描述 DataGridView 控件中提供而 DataGrid 控件中未提供的几个主要功能:
DataGridView 功能 |
说明 |
多种列类型 |
与 DataGrid 控件相比,DataGridView 控件提供了更多的内置列类型。这些列类型能满足大多数常见方案的需要,而且比 DataGrid 控件中的列类型更容易扩展或替换。有关更多信息,请参见 Windows 窗体 DataGridView 控件中的列类型。 |
多种数据显示方式 |
DataGrid 控件仅限于显示外部数据源的数据。而 DataGridView 控件可显示存储在控件中的未绑定数据、来自绑定数据源的数据或者同时显示绑定数据和未绑定数据。也可以在 DataGridView 控件中实现虚拟模式以提供自定义数据管理。有关更多信息,请参见 Windows 窗体 DataGridView 控件中的数据显示模式。 |
用于自定义数据显示的多种方式 |
DataGridView 控件提供了许多属性和事件,您可以使用它们指定数据的格式设置方式和显示方式。例如,您可以根据单元格、行和列中包含的数据更改其外观,或者将一种数据类型的数据替换为另一种类型的等效数据。有关更多信息,请参见 Windows 窗体 DataGridView 控件中的数据格式设置。 |
用于更改单元格、行、列、标头外观和行为的多个选项 |
DataGridView 控件使您能够以多种方式使用各个网格组件。例如,您可以冻结行和列以阻止其滚动;隐藏行、列和标头;更改调整行、列和标头大小的方式;更改用户进行选择的方式;以及为各个单元格、行和列提供工具提示和快捷菜单。 |
2.多种列类型(DataGridView 控件中的列类型)
1.AutoGenerateColumns为 true 时,会自动与数据源的包含数据类型相应的默认列类型生成列
2.可以再Column集合中管理列
3.在 DataGridView 控件中使用的各种列类:
类 |
说明 |
DataGridViewTextBoxColumn |
与基于文本的值一起使用。在绑定到数字和字符串时自动生成。 |
DataGridViewCheckBoxColumn |
与 Boolean 和 CheckState 值一起使用。在绑定到这些类型的值时自动生成。 |
DataGridViewImageColumn |
用于显示图像。在绑定到字节数组、Image 对象或 Icon 对象时自动生成。 |
DataGridViewButtonColumn |
用于在单元格中显示按钮。不会在绑定时自动生成。通常用作未绑定列。 |
DataGridViewComboBoxColumn |
用于在单元格中显示下拉列表。不会在绑定时自动生成。通常手动进行数据绑定。 |
DataGridViewLinkColumn |
用于在单元格中显示链接。不会在绑定时自动生成。通常手动进行数据绑定。 |
自定义列类型 |
您可以通过继承 DataGridViewColumn 类或该类的任何一个派生类来创建自己的列类,从而提供自定义的外观、行为或寄宿控件 |
4.DataGridViewTextBoxColumn :
单元格值会自动转换为字符串以供显示,通过处理 DataGridView 控件的 CellFormatting 和 CellParsing 事件自定义这些转换。
5.
5.高级主题:DataGridView中的自定义单元格样式
1.DataGridViewCellStyle 类
DataGridViewCellStyle 类包含与视觉样式相关的下列属性:
- BackColor 和 ForeColor
- SelectionBackColor 和 SelectionForeColor
- Font
此类还包含与格式设置相关的下列属性:
- Format 和 FormatProvider
- NullValue 和 DataSourceNullValue
- WrapMode
- Alignment
- Padding
MSDN it:DataGridViewCellStyle
2.使用 DataGridViewCellStyle 对象
调用 DataGridView、DataGridViewColumn、DataGridViewRow 和 DataGridViewCell的 DataGridViewCellStyle 属性。如果这些属性中有一个尚未设置,则检索该属性的值将新建 DataGridViewCellStyle 对象。您还可以实例化自己的 DataGridViewCellStyle 对象,并将这些对象分配给以上属性。
在多个 DataGridView 元素间共享 DataGridViewCellStyle 对象可以避免不必要地重复样式信息。由于在控件、列和行三个级别设置的样式从每个级别向下筛选直到单元格级别,因此,在每个级别上仅设置与其上面的级别不同的那些样式属性,也可以避免样式重复。
如上所述,如果以前没有设置过样式属性,则获取样式属性值将自动实例化新的 DataGridViewCellStyle 对象。为了避免不必要地创建这些对象,行类和列类具有 HasDefaultCellStyle 属性,您可以检查该属性以确定是否设置了 DefaultCellStyle 属性。同样,单元格类具有 HasStyle 属性,该属性指示是否设置了 Style 属性。
3.主要属性
属性 |
类 |
说明 |
DefaultCellStyle |
DataGridView、DataGridViewColumn、 DataGridViewRow 和派生类 |
获取或设置整个控件(包括标头单元格)、一列或一行中所有单元格使用的默认样式。 |
RowsDefaultCellStyle |
DataGridView |
获取或设置控件中所有行使用的默认单元格样式。不包括标头单元格。 |
AlternatingRowsDefaultCellStyle |
DataGridView |
获取或设置控件中交替行使用的默认单元格样式。用于创建帐目型的效果。 |
RowHeadersDefaultCellStyle |
DataGridView |
获取或设置控件的行标头使用的默认单元格样式。如果启用视觉样式,则用当前主题进行重写。 |
ColumnHeadersDefaultCellStyle |
DataGridView |
获取或设置控件的列标头使用的默认单元格样式。如果启用视觉样式,则用当前主题进行重写。 |
Style |
DataGridViewCell 和派生类 |
获取或设置在单元格级别指定的样式。这些样式将重写那些从较高级别继承的样式。 |
InheritedStyle |
DataGridViewCell、DataGridViewRow、DataGridViewColumn 和派生类 |
获取当前应用于单元格、行或列的所有样式,包括从较高级别继承的样式。 |
4.样式继承
每个 DataGridViewCell 从其 InheritedStyle 属性获取外观。此属性返回的 DataGridViewCellStyle 对象从类型 DataGridViewCellStyle 的属性层次结构继承其属性值。下面按非标头单元格的 InheritedStyle 获取其值的顺序列出这些属性。
- DataGridViewCell.Style
- DataGridViewRow.DefaultCellStyle
- DataGridView.AlternatingRowsDefaultCellStyle(仅限于索引号为奇数的行中的单元格)
- DataGridView.RowsDefaultCellStyle
- DataGridViewColumn.DefaultCellStyle
- DataGridView.DefaultCellStyle
对于行和列标头单元格,用以下列表中的值填充 InheritedStyle 属性,该列表列出给定顺序的源属性。
- DataGridViewCell.Style
- DataGridView.ColumnHeadersDefaultCellStyle 或 DataGridView.RowHeadersDefaultCellStyle
- DataGridView.DefaultCellStyle
下图阐释此过程。
还可以访问由特定的行和列继承的样式。列 InheritedStyle 属性从下列属性继承其属性值。
- DataGridViewColumn.DefaultCellStyle
- DataGridView.DefaultCellStyle
行 InheritedStyle 属性从下列属性继承其属性值。
- DataGridViewRow.DefaultCellStyle
- DataGridView.AlternatingRowsDefaultCellStyle(仅限于索引号为奇数的行中的单元格)
- DataGridView.RowsDefaultCellStyle
- DataGridView.DefaultCellStyle
对于 InheritedStyle 属性返回的 DataGridViewCellStyle 对象中的每个属性,均从相应列表中的第一个单元格样式获得其属性值,该列表中对应的属性被设置为 DataGridViewCellStyle 类默认值以外的值。
4.高级自定义:
DataGridView 控件提供了多种用于自定义该控件的外观和行为的方法。
方案关键点
- 您可以提供自己的单元格绘制代码。有关更多信息,请参见 如何:自定义 Windows 窗体 DataGridView 控件中单元格的外观。
- 您可以提供自己的行绘制方式。这一功能非常有用,例如创建内容跨越多个列的行时。有关更多信息,请参见 如何:自定义 Windows 窗体 DataGridView 控件中行的外观。
- 您可以实现自己的单元格类和列类以自定义单元格的外观。有关更多信息,请参见 如何:通过扩展 Windows 窗体 DataGridView 控件中单元格和列的行为和外观对其进行自定义。
- 您可以实现自己的单元格类和列类(不使用内置的列类型所提供的类)来承载控件。有关更多信息,请参见 如何:在 Windows 窗体 DataGridView 单元格中承载控件。
5.自动调整行和列的大小
方案关键点
手动调整大小允许用户调整单元格的高度和宽度。
自动调整大小允许您维护单元格的大小,以便永远不用剪裁单元格的内容。
以编程方式调整大小允许您在特定的时间调整单元格的大小,以避免连续调整大小对性能的影响。
参见MSDN:DataGridView 控件中的大小调整选项
ms-help://MS.MSDNQTR.v90.chs/dv_fxmclictl/html/a5620a9c-0d06-41e3-8934-c25ddb16c9e6.htm
6.高级主题:DataGridView性能优化
1)使用虚拟模式:见高级主题:DataGridView 控件方案
虚拟模式即为 实时加载,用于加载大容量的表。检索显示所需的数据,而且只在用户将新行滚动到视图中时才检索额外的数据,从而在数据库检索值的时候就丢弃无用的值
背景知识:
1.DataGridView.CellValueNeeded 事件:当 DataGridView 控件的 VirtualMode 属性为 true,并且 DataGridView 只有在单元格中有值的情况下触发。
代码实现:
参见MSDN:在 Windows 窗体 DataGridView 控件中实现实时数据加载的虚拟模式
ms-help://MS.MSDNQTR.v90.chs/dv_fxmclictl/html/c2a052b9-423c-4ff7-91dc-d8c7c79345f6.htm
2)其他
涉及特性的,尽量只在FataGridView层次上
- 有效使用单元格样式
- 有效使用快捷菜单
- 有效使用自动大小调整
在具有大型行集的 DataGridView 控件上,避免使用自动大小调整。
- 有效使用选定单元格、行和列的集合
- 使用 GetCellCount 方法并传入值而避免County属性
- 避免基于单元格的选择模式。应将 DataGridView.SelectionMode 属性设置为 DataGridViewSelectionMode.FullRowSelect 或 DataGridViewSelectionMode.FullColumnSelect。
- 使用共享行
- 防止行成为非共享行