这些资料是我学习的时候在网络上寻找到的,发布出来希望对大家有帮助,一起努力前进,嘿嘿......Microsoft C#规范 2.0 版 GFC用户提交

feedsky 抓虾 pageflakes google reader my yahoo bloglines 鲜果 有道 http://wap.feedsky.com/bliplink

DataGridView2

1                       何为DataGridView

通过DataGridView控件,可以显示和编辑表格式的数据,而这些数据可以取自多种不同类型的数据源。= o ns = "urn:schemas-microsoft-com:office:office" /> 

DataGridView控件具有很高的的可配置性和可扩展性,提供了大量的属性、方法和事件,可以用来对该控件的外观和行为进行自定义。当你需要在WinForm应用程序中显示表格式数据时,可以优先考虑DataGridView(相比于DataGrid等其它控件)。如果你要在小型网格中显示只读数据,或者允许用户编辑数以百万计的记录,DataGridView将为你提供一个易于编程和良好性能的解决方案。 

DataGridView 用来替换先前版本中的DataGrid,拥有较DataGrid更多的功能;但DataGrid仍然得到保留,以备向后兼容和将来使用。如果你要在两者中选择,可以参考下面给出的DataGrid DataGridView之间区别的细节信息。 

1.1           DataGridViewDataGrid 之间的区别

DataGridView提供了大量的DataGrid所不具备的基本功能和高级功能。此外,DataGridView 的结构使得它较之DataGrid控件更容易扩展和自定义。 

 

下表描述了DataGridView提供而DataGrid未提供的几个主要功能。 

 

DataGridView功能 

描述  

多种列类型 

 

DataGrid相比,DataGridView 提供了更多的内置列类型。这些列类型能够满足大部分常见需要,而且比DataGrid中的列类型易于扩展或替换。 

 

多种数据显示方式 

DataGrid仅限于显示外部数据源的数据。而DataGridView则能够显示非绑定的数据,绑定的数据源,或者同时显示绑定和非绑定的数据。你也可以在DataGridView中实现virtual mode,实现自定义的数据管理。 

 

用于自定义数据显示的多种方式 

DataGridView提供了很多属性和事件,用于数据的格式化和显示。比如,你可以根据单元格、行和列的内容改变其外观,或者使用一种类型的数据替代另一种类型的数据。  

 

用于更改单元格、行、列、表头外观和行为的多个选项 

DataGridView使你能够以多种方式操作单个网格组件。比如,你可以冻结行和列,避免它们因滚动而不可见;隐藏行、列、表头;改变行、列、表头尺寸的调整方式;为单个的单元格、行和列提供工具提示(ToolTip)和快捷菜单。  

 

 

唯一的一个DataGrid提供而DataGridView未提供的特性是两个相关表中数据的分层次显示(比如常见的主从表显示)。你必须使用两个DataGridView来显示具有主从关系的两个表的数据。 

1.2           DataGridView的亮点

下表着重显示了DataGridView的主要特性,稍后会介绍它们的详细信息。 

DataGridView控件特性 

描述  

多种列类型 

DataGridView提供有TextBoxCheckBoxImageButtonComboBoxLink类型的列及相应的单元格类型。 

 

多种数据显示方式 

DataGrid仅限于显示外部数据源的数据。而DataGridView则能够显示非绑定的数据,绑定的数据源,或者同时显示绑定和非绑定的数据。你也可以在DataGridView中实现virtual mode,实现自定义的数据管理。 

 

自定义数据的显示和操作的多种方式 

DataGridView提供了很多属性和事件,用于数据的格式化和显示。 

此外,DataGridView提供了操作数据的多种方式,比如,你可以: 

§          对数据排序,并显示相应的排序符号(带方向的箭头表示升降序

§          对行、列和单元格的多种选择模式;多项选择和单项选择 

§          以多种格式将数据拷贝到剪贴板,包括textCSV (以逗号隔开的值) HTML 

§          改变用户编辑单元格内容的方式 

 

用于更改单元格、行、列、表头外观和行为的多个选项 

DataGridView使你能够以多种方式操作单个网格组件。比如,你可以: 

§          冻结行和列,避免它们因滚动而不可见; 

§          隐藏行、列、表头; 

§          改变行、列、表头尺寸的调整方式; 

§          改变用户对行、列、单元格的选择模式; 

§          为单个的单元格、行和列提供工具提示(ToolTip)和快捷菜单。 

§          自定义单元格、行和列的边框样式。 

 

提供丰富的可扩展性的支持 

DataGridView提供易于对网格进行扩展和自定义的基础结构,比如: 

§          处理自定义的绘制事件可以为单元格、列和行提供自定义的观感; 

§          继承一个内置的单元格类型以为其提供更多的行为; 

§          实现自定义的接口以提供新的编辑体验。 

 

 

 

 

 

 

 

 

 

2                       DataGridView的结构

DataGridView及其相关类被设计为用于显示和编辑表格数据式数据的灵活的、可扩展的体系。这些类都位于system.Windows.Forms命名空间,它们的名称也都有共同的前缀"DataGridView" 

2.1           结构元素(Architecture Elements)

主要的DataGridView相关类继承自DataGridViewElement类。  

= v ns = "urn:schemas-microsoft-com:vml" /> 

DataGridViewElement类有两个属性,一是DataGridView,该属性提供了对其所属的DataGridView的引用;二是State,该属性表示当前的状态,其值为DataGridViewElementStates枚举,该枚举支持位运算,这意味着可以设置组合状态。 

2.2           单元格和组(Cells and Bands)

DataGridView由两种基本的对象组成:单元格(cell)和组(band)。所有的单元格都继承自DataGridViewCell基类。 两种类型的组(或称集合)DataGridViewColumnDataGridViewRow都继承自DataGridViewBand 基类,表示一组结合在一起的单元格。 

DataGridView会与一些类进行互操作,但最常打交道的则是如下三个:DataGridViewCell DataGridViewColumnDataGridViewRow 

2.3           DataGridView的单元格 (DataGridViewCell)

单元格(cell)是操作DataGridView的基本单位。Display is centered on cells, and data entry is often performed through cells。可以通过DataGridViewRow 类的Cells 集合属性访问一行包含的单元格,通过DataGridViewSelectedCells集合属性访问当前选中的单元格,通过DataGridViewCurrentCell属性访问当前的单元格。 


 

DataGridViewCell 类图 

 

Cell 相关类和属性 

 

DataGridViewCell是一个抽象基类,所有的单元格类型都继承于此。DataGridViewCell及其继承类型并不是Windows Forms控件,但其中一些宿主于Windows Forms控件。单元格支持的编辑功能通常都由其宿主控件来处理。 

 

DataGridViewCell对象不会像Windows Forms控件那样控制自己的外观和绘制(painting)特征,相反的,DataGridView会负责其包含的单元格的外观。通过DataGridView 控件的属性和事件,你可以深刻地影响单元格的外观和行为。如果你对单元格定制有特殊要求,超出了DataGridView提供的功能,可以继承DataGridViewCell或者它的某个子类来满足这些要求。  

2.3.1          DataGridViewCell的工作机制

理解DataGridView结构的一个重要部分是理解DataGridViewCell的工作机制: 

单元格的值(A Cell’s Value) 

单元格的值是其根本所在。如果单元格所在列不是绑定列,并且所在的DataGridView也不是Virtual Mode,那么它的值就由它本身所持有并维护。对于那些由绑定产生的单元格,它们压根儿就不“知道”该持有什么值,当然也就不会去维护了;当DataGridView需要单元格的值的时候,它会到数据源中查询该单元格应当显示的值。在Virtual Mode下,除了会触发CellValueNeeded事件以获取相应单元格的值外,与数据绑定方式非常相似。在单元格级,所有这些由DataGridViewCell.GetValue() 方法来控制。 

默认情况下,单元格的值的类型为object。当一个列被绑定后,会设置它的ValueType属性,它包含的单元格的ValueType也随之更新。而单元格的ValueType对于下一步的格式化非常重要。 

格式化显示(Formatting for Display) 

注意:当DataGridView需要了解“如何显示这个单元格”时,它需要的是单元格的FormattedValue ,而不是Value。这是一个复杂的过程,因为格式化屏幕上的一些内容通常需要将它转换为字符串。例如,尽管你将单元格的值(Value)设置为整型值155,在显示它的时候仍需要将其格式化。单元格和其所在的列的FormattedValueType 属性决定了显示它时所用的类型。多数列使用字符串类型,而ImageCheckBox类型的单元格/列则使用其它类型。Image类型的单元格和列使用Image作为默认的FormattedValueType,它的内置实现了解如何去显示一个ImageCheckBox类型的单元格/列的FormattedValueType属性则取决于属性ThreeState的值。在单元格级,所有这些由DataGridViewCell.GetFormattedValue()控制。 

默认情况下,DataGridView使用TypeConverter将单元格的值(Value)转换为格式化的值(FormattedValue)DataGridView会基于单元格的ValueTypeFormattedValueType属性来获取合时的TypeConverter 

对于一个单元格,FormattedValue会得到多次请求(即会在多个地方用到):绘制单元格的时候,所在列根据单元格内容自动调整大小的时候,甚至是在判断鼠标是否经过单元格内容时。每次需要FormattedValue的时候,DataGridView会触发CellFormatting事件,这时你就有机会修改单元格的格式化显示了。 

如果单元格不能获取它的格式化值,它会触发DataError事件。 

格式化显示单元格还包含以怎样的首选尺寸显示它。这个首选尺寸是由单元格的FormattedValue,填充区域(padding),附加显示和边框合并而成。 

绘制单元格的显示(Painting the Display) 

在获得FormattedValue 后,单元格将负责绘制它的内容。单元格决定了绘制过程所使用的正确样式(参见本文档第五章的样式部分)并进行绘制。记住:如果单元格不去绘制自己,那么该单元格将不会有任何内容得到绘制(即单元格的绘制只由它自己负责),行、列不会负责绘制任何内容,因此要确保至少要绘制单元格的背景(background),否则单元格所在的矩形区域仍然是无效的(即未经绘制) 

解析单元格的显示(Parsing the Display) 

用户开始与单元格交互后,可能会编辑单元格的值。有一件事要记住,用户编辑的实际上是单元格的FormattedValue。用户提交所编辑的值时,FormattedValue需要转换回单元格的值(Value),这个过程称为解析(parsing)。在单元格级上,所有这些工作由单元格的DataGridViewCell.ParseFormattedValue(int  rowIndex)方法控制。 

默认情况下,会再次使用TypeConverter来将FormattedValue解析为单元格的真实值,这时会触发DataGridViewCellParsing事件,这时你就有机会修改单元格的解析方式了。

如果单元格不能得到正确地解析,会触发DataError事件。 

2.3.2          常见问题 

1)       如何使指定的单元格不可编辑? 

2)       如何让一个单元格不可用(disable)?

3)       如何避免用户将焦点设置到指定的单元格? 

4)       如何使所有单元格总是显示控件(不论它是否处于编辑状态)? 

5)       Why does the cell text show up with “square” characters where they should be new lines?

6)       如何在单元格内同时显示图标和文本? 

 

2.4           DataGridView的列(DataGridViewColumn)

DataGridView所附带的数据(这些数据可以通过绑定或非绑定方式附加到控件)的结构表现为DataGridView的列。你可以使用DataGridViewColumns集合属性访问DataGridView所包含的列,使用SelectedColumns 集合属性访问当前选中的列。 

DataGridViewColumn 类图 

 

Column 相关类和属性 

 

一些主要的单元格类型拥有相应的列类型,这些列类型继承自DataGridViewColumn基类。 

常见问题: 

1)       如何隐藏一列?

2)       如何避免用户对列排序? 

3)       如何针对多个列排序?

 

2.5           DataGridView的编辑控件(Editing Controls)

支持高级编辑功能的单元格一般都使用一个继承自Windows Forms控件的宿主控件,这些控件同时也实现了IDataGridViewEditingControl接口。 

DataGridView Editing Control Class diagram 

 

Classes that implement Editing Controls  

 

 

 

下表说明了单元格类型、列类型、编辑控件间的关系: 

单元格类型  

宿主控件  

列类型  

DataGridViewButtonCell 

n/a 

DataGridViewButtonColumn 

DataGridViewCheckBoxCell 

n/a 

DataGridViewCheckBoxColumn 

DataGridViewComboBoxCell 

DataGridViewComboBoxEditingControl 

DataGridViewComboBoxColumn 

DataGridViewImageCell 

n/a 

DataGridViewImageColumn 

DataGridViewLinkCell 

n/a 

DataGridViewLinkColumn 

DataGridViewTextBoxCell 

DataGridViewTextBoxEditingControl 

DataGridViewTextBoxColumn 

常见问题(FAQ) 

1)       如何为编辑控件添加事件处理函数? 

2)       应在何时移除编辑控件的事件处理函数?  

3)       如何处理ComboBox列中Combox控件的SelectIndexChanged事件?

4)       如何使所有单元格总是显示控件(不论它是否处于编辑状态) 

 

2.6           DataGridViewRow

DataGridViewRow类用于显示数据源的一行数据。可以通过DataGridView控件的Rows集合属性来访问其包含的行,通过SelectedRows集合属性访问当前选中的行。 

DataGridViewRow类图 

 

Row相关的类和属性 

 

你可以继承DataGridViewRow类来实现自己的行类型,虽然多数情况下这并不必要。DataGridView 有几个行相关的事件和属性,用以自定义其包含的DataGridViewRow对象的行为。 

 

如果你将DataGridViewAllowUserToAddRows属性设为true,一个专用于添加新行的特殊行会出现在最后一行的位置上,这一行也属于Rows集合,但它有一些需要你提起注意的特殊功能,要获得这方面的更多信息,请参看= st1 ns = "urn:schemas-microsoft-com:office:smarttags" />4.1.3节。 

2.6.1          常见问题 

1)       如何通过拖放调整行的顺序? 

 


友情链接

郑州大学软件学院 SpringWidgets-Blogger 徵信社 翻译公司 链接帮手网 行驶证字体 酷站目录 Friend Connectified