[原创][学习笔记][WinForm]MSDN中的WinForm控件学习

MSDN学习笔记 肯定很多MSDN上的拉,不要说我抄袭噢~

 

. WinForm控件:BackgroundWorker 组件

(多线程专题中再做整理)

.WinForm控件:BindingNavigator 控件

1.概述

     用于提供一个UI来导航和操作数据,所以通常和BindingSource一起使用,实现在数据记录中的移动和交互,由 ToolStrip 和一系列 ToolStripItem 对象组成,默认的每个控件在BindingSource中都有一个方法与之对应

2.常用操作

UI 控件

BindingNavigator 成员

BindingSource 成员

移到最前

MoveFirstItem

MoveFirst

前移一步

MovePreviousItem

MovePrevious

当前位置

PositionItem

Current

计数

CountItem

Count

移到下一条记录

MoveNextItem

MoveNext

移到最后

MoveLastItem

MoveLast

新添

AddNewItem

AddNew

删除

DeleteItem

RemoveCurrent

.WinForm控件:BindingSource 组件

1.概述

该控件有两功能:

1.数据导管:实现连接窗体上控件与数据的中间层(BindingSource绑定到数据源+BindingSource绑定到控件)         

            2.数据源:强类型数据源.Add()向组件添加类型会创建一个该类型的列表

2.常用操作

1)作为数据导管(媒介)

     连接数据库:DataSource属性填入DataSetDataMember属性填入该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方法使所有绑定数据源的控件更新数据源,参数为ResetBindingstrue)数据源架构发生改变,参数为ResetBindingsfalse)仅数据发生改变
  • 可以绑定到 Type(通过TypeOf(OneClass),而不是绑定到内存中的某个对象。这样的话,在调用数据时,系统会自动添加一个新的对象。 实例:如何:将 Windows 窗体控件绑定到类型

 

  1. 当前项管理

下列为常用方法

CurrencyManager 属性

获取与 BindingSource 关联的货币管理器。

GetRelatedCurrencyManager 方法

CurrencyManager GetRelatedCurrencyManager(
        string
dataMember
如果还有其他 BindingSource 绑定到指定的数据成员,则获取其货币管理器。

Current 属性

获取数据源的当前项。

Position 属性

获取或设置基础列表中的当前位置。

EndEdit 方法

将挂起的更改应用于基础数据源。

CancelEdit 方法

取消当前的编辑操作

 

  1. 作为列表的数据源

接口整理

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来触发事件

    2ShowDialog显示一个窗体时,可以使用按钮的DialogResult属性指定ShowDialog的返回值。

    3设置 DialogResult 属性将引起对话框自动关闭,但仍可处理控件的 Click 事件,而且对话框在事件处理程序的代码完成后立即关闭。

    4)阻止窗口关闭:可以在Closing中设置DialogResult的值为None

.WinForm控件:CheckBox控件

1.概述

    用于指示某条件是打开还是关闭的。可以成组使用CheckBox来构成复选框,可以从中选择一个或多个

2.常用操作

    1Checked属性:返回True False

    2CheckState属性:返回CheckedUnchecked,当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];
for (int i = 0; i <= 9; i++)
{ItemObject[i] = "Item" + i;}
listBox1.Items.AddRange(ItemObject);

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.AllowFullOpenFalse时,禁止自定义颜色

3.SolidColorOnly控制是否纯色。

4.调用对话框,调用ShowDialog方法

5.ShowHelpTrue时,点击窗口上的帮助会引发HelpRequest事件。

 

.WinForm控件:ComboBox组件

1.概述

    在下拉式组合框中显示一项数据。顶部为允许键入的列表框,右侧有一个选择列表框。

2.常见操作:

    1.SelectedIndex可以设置或者返回所选定的项,未选中项时为-1,第一项为0.

 2.SelectedItem 属性返回项本身

    3.Count属性 返回项数

    4.Items属性操作见 CheckListBox控件->常见操作->Items常见操作

    5.BeginUpdateEndUpdate 方法:再一次次添加时使用这个可以维持性能。

    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接口的类

DataTableDataSet

实现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 对象模型

 

1DataGridViewElement

常用属性

名称

说明

 

 

DataGridView

获取与此元素关联的 DataGridView 控件。

 

State

获取元素的用户界面 (UI) 状态。

State为一个DataGridViewElementStates 枚举(可通过按位与操作符选中多个状态)

员名称

说明

 

 

None

指示元素处于它的默认状态。

 

Displayed

指示元素当前显示在屏幕上。

 

Frozen

指示不能通过 UI 滚动元素。

 

ReadOnly

指示元素不会接受用户输入来更改它的值。

 

Resizable

指示可以通过 UI 来调整元素大小。除非该值与 ResizableSet 值结合,否则会忽略该值。

 

ResizableSet

指示元素没有继承其父级的大小可调状态。

 

Selected

指示元素处于选定的(突出显示的)UI 状态。

 

Visible

指示元素可见(可显示)。

 

2DataGridViewCell常用属性

DataGridViewCell为单元格最基本单位,通过使用 DataGridViewRow 类的 CellsSelectedCells 集合可以访问单元格

常用属性:

名称

说明

 

ColumnIndex

获取此单元格的列索引。

 

ContentBounds

获取环绕单元格内容区域的边框。

 

ContextMenuStrip

获取或设置与单元格关联的快捷菜单。

 

DefaultNewRowValue

获取新记录所在行中单元格的默认值。

 

Displayed

获取一个值,该值指示当前该单元格是否显示在屏幕上。

 

FormattedValue

获取为显示进行格式化的单元格的值。

 

FormattedValueType

获取与该单元格关联的格式化值的类型。

 

Frozen

获取指示单元格是否已被冻结的值。

 

HasStyle

获取指示是否已设置 Style 属性的值。

 

InheritedState

获取该单元格从它的行和列的状态继承后的当前状态。

 

InheritedStyle

获取当前应用于单元格的样式。

 

IsInEditMode

获取一个值,该值指示此单元格当前是否处于编辑状态。

 

OwningColumn

获取包含此单元格的列。

 

OwningRow

获取包含此单元格的行。

 

PreferredSize

获取适合该单元格的矩形区域的大小(以像素为单位)。

 

ReadOnly

获取或设置一个值,该值表示是否可以编辑该单元格的数据。

 

RowIndex

获取单元格父行的索引。

 

Selected

获取或设置一个值,该值指示是否已选定该单元格。

 

Size

获取单元格的大小。

 

Style

获取或设置单元格的样式。

 

ToolTipText

获取或设置与此单元格关联的 ToolTip 文本。

 

Value

获取或设置与此单元格关联的值。

 

ValueType

获取或设置单元格中值的数据类型。

 

Visible

获取一个值,该值指示单元格是否位于已隐藏的行或列中。

 

3DataGridViewBand常用属性

 

名称

说明

 

ContextMenuStrip

获取或设置带区的快捷菜单。

 

DefaultCellStyle

获取或设置带区的默认单元格样式。

 

DefaultHeaderCellType

获取或设置默认标题单元格的运行时类型。

 

Displayed

获取一个值,该值指示带区当前是否显示在屏幕上。

 

Frozen

获取或设置一个值,该值指示当用户滚动 DataGridView 时带区是否移动。

 

HasDefaultCellStyle

获取一个值,该值指示是否已设置 DefaultCellStyle 属性。

 

HeaderCellCore

获取或设置 DataGridViewBand 的标题单元格。

 

Index

获取带区在 DataGridView 控件中的相对位置。

 

InheritedStyle

获取对于当前带区有效的单元格样式(考虑样式继承)。

 

IsRow

获取一个值,该值指示带区是否表示一个行。

 

ReadOnly

获取或设置一个值,该值指示用户是否可以编辑带区的单元格。

 

Resizable

获取或设置一个值,该值指示是否可以在用户界面 (UI) 中调整带区的大小。

 

Selected

获取或设置一个值,该值指示带区是否为被选定。

 

Visible

获取或设置一个值,该值指示带区对于用户是否可见。

 

4DataGridViewColumn

1.DataGridViewColumn类表示 DataGridView 控件中的逻辑列。可以通过控件的 Columns 集合来检索列

 可以使用 ColumnsSelectedColumns 集合访问 DataGridView 控件的列

DataGridViewColumn 对象模型

2.DataGridViewColumn 主要用于调整列用户界面 (UI) 的外观和行为,如列宽和单元格样式

3.常用属性

 

名称

说明

 

AutoSizeMode

获取或设置模式,通过此模式列可以自动调整其宽度。

 

CellTemplate

获取或设置用于创建新单元格的模板。

 

CellType

获取单元格模板的运行时类型。

 

DataPropertyName

获取或设置数据源属性的名称或与 DataGridViewColumn 绑定的数据库列的名称。

 

DisplayIndex

相对于当前所显示各列,获取或设置列的显示顺序。

 

DividerWidth

获取或设置列分隔符的宽度(以像素为单位)。

 

FillWeight

获取或设置一个值,表示当该列处于填充模式时,相对于控件中处于填充模式的其他列的宽度。

 

HeaderCell

获取或设置表示列标题的 DataGridViewColumnHeaderCell

 

HeaderCellCore

获取或设置 DataGridViewBand 的标题单元格。 (继承自 DataGridViewBand。)

 

HeaderText

获取或设置列标题单元格的标题文本。

 

InheritedAutoSizeMode

获取对该列有效的缩放模式。

 

IsDataBound

获取一个值,指示该列是否绑定到某个数据源。

 

MinimumWidth

获取或设置列的最小宽度(以像素为单位)。

 

Name

获取或设置列名称。

 

Site

获取或设置列的站点。

 

SortMode

获取或设置列的排序模式。

 

ToolTipText

获取或设置用于工具提示的文本。

 

ValueType

获取或设置列单元格中值的数据类型。

 

Width

获取或设置列的当前宽度。

 

5DataGridRows

1.DataGridViewRow 对象模型

2.常见成员:

 

名称

说明

Cells

获取用于填充行的单元格集合。

ContextMenuStrip

获取或设置行的快捷菜单。 (重写 DataGridViewBand.ContextMenuStrip。)

DataBoundItem

获取用于填充行的数据绑定对象。

DividerHeight

获取或设置行分隔符的高度(以像素为单位)。

ErrorText

获取或设置行级别错误的错误消息文本。

HeaderCell

获取或设置行的标头单元格。

Height

获取或设置行的当前高度。

IsNewRow

获取一个指示行是否为用于新纪录的行的值。

MinimumHeight

获取或设置行的最小高度。

3.备注:

DataGridViewRow 类表示 DataGridView 控件中的行。可以通过控件的 RowsSelectedRows 集合检索行。

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 itDataGridViewCellStyle

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 获取其值的顺序列出这些属性。

  1. DataGridViewCell.Style
  2. DataGridViewRow.DefaultCellStyle
  3. DataGridView.AlternatingRowsDefaultCellStyle(仅限于索引号为奇数的行中的单元格)
  4. DataGridView.RowsDefaultCellStyle
  5. DataGridViewColumn.DefaultCellStyle
  6. DataGridView.DefaultCellStyle

对于行和列标头单元格,用以下列表中的值填充 InheritedStyle 属性,该列表列出给定顺序的源属性。

  1. DataGridViewCell.Style
  2. DataGridView.ColumnHeadersDefaultCellStyle 或 DataGridView.RowHeadersDefaultCellStyle
  3. DataGridView.DefaultCellStyle

下图阐释此过程。

还可以访问由特定的行和列继承的样式。列 InheritedStyle 属性从下列属性继承其属性值。

  1. DataGridViewColumn.DefaultCellStyle
  2. DataGridView.DefaultCellStyle

行 InheritedStyle 属性从下列属性继承其属性值。

  1. DataGridViewRow.DefaultCellStyle
  2. DataGridView.AlternatingRowsDefaultCellStyle(仅限于索引号为奇数的行中的单元格)
  3. DataGridView.RowsDefaultCellStyle
  4. DataGridView.DefaultCellStyle

对于 InheritedStyle 属性返回的 DataGridViewCellStyle 对象中的每个属性,均从相应列表中的第一个单元格样式获得其属性值,该列表中对应的属性被设置为 DataGridViewCellStyle 类默认值以外的值。

 

4.高级自定义:

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。
  • 使用共享行
  • 防止行成为非共享行
posted on 2009-08-10 15:23  申玉宝@三月软件  阅读(5438)  评论(1编辑  收藏  举报

我要啦免费统计