DataGridView控件使用大全DataGridView控件DataGridView是用于WindowsFroms2.0的新网格控件。它可以取代先前版本中DataGrid控件,它易于使用并高度可定制,支持很多我们的用户需要的特性。关于本文档:本文档不准备面面俱到地介绍DataGridView,而是着眼于深入地介绍一些技术点的高级特性。本文档按逻辑分为5个章节,首先是结构和特性的概览,其次是内置的列/单元格类型的介绍,再次是数据操作相关的内容,然后是主要特性的综述,最后是最佳实践。大部分章节含有一个“Q&A”部分,来回答该章节相关的一些常见问题。注意,某些问题会由于知识点的关联性重复出现在多个章节。这些问题、答案及其附带的示例代码都包含在本文档的附录部分。内容1何为DataGridView..41.1DataGridView和DataGrid之间的区别...41.2DataGridView的亮点...52DataGridView的结构...62.1结构元素...62.2单元格和组...62.3DataGridView的单元格...62.3.1DataGridViewCell的工作机制...72.4DataGridView的列...92.5DataGridView的编辑控件...92.6DataGridView的行...103列/单元格类型揭密...113.1DataGridViewTextBoxColumn.113.2DataGridViewCheckBoxColumn.123.3DataGridViewImageColumn.123.4DataGridViewButtonColumn.133.5DataGridViewComboBoxColumn.133.5.1DataError与ComboBox列...133.6DataGridViewLinkColumn.144操作数据...154.1数据输入和验证的相关事件...154.1.1数据验证相关事件的顺序...154.1.2验证数据...154.1.3在新行中的数据输入...164.2关于Null值...194.2.1NullValue属性...194.2.2DataSourceNullValue属性...194.3DataError事件...204.4数据绑定模式...214.4.1非绑定模式...214.4.2绑定模式...214.4.3虚拟模式...224.4.4混合模式...225Overviewoffeatures.245.1Styling.245.1.1TheDataGridViewCellStyleClass.245.1.2UsingDataGridViewCellStyleObjects.245.1.3StyleInheritance.255.1.4SettingStylesDynamically.285.2Custompainting.285.2.1PaintParts.285.2.2RowPrePaintandPostPaint295.3Autosizing.305.3.1SizingOptionsintheWindowsFormsDataGridViewControl305.3.2ResizingwiththeMouse.315.3.3AutomaticSizing.325.3.4ProgrammaticResizing.335.3.5CustomizingContent-basedSizingBehavior.345.3.6Content-basedSizingOptions.345.4Selectionmodes.345.4.1ProgrammaticSelection.355.5Scrolling.355.5.1Scrollevent355.5.2Scrollbars.355.5.3ScrollingProperties.365.6Sorting.365.6.1ProgrammaticSorting.375.6.2CustomSorting.385.7Borderstyles.395.7.1StandardBorderStyles.395.7.2AdvancedBorderStyles.395.8Enter-Editmodes.405.9Clipboardcopymodes.405.10Frozencolumns/rows.415.11ImplementingCustomcellsandeditingcontrols/cells.415.11.1IDataGridViewEditingControl425.11.2IDataGridViewEditingCell425.12Virtualmode.425.12.1BoundModeandVirtualMode.425.12.2SupplementingBoundMode.425.12.3ReplacingBoundMode.435.12.4Virtual-ModeEvents.435.12.5BestPracticesinVirtualMode.445.13Capacity.446BestPractices.456.1UsingCellStylesEfficiently.456.2UsingShortcutMenusEfficiently.456.3UsingAutomaticResizingEfficiently.456.4UsingtheSelectedCells,Rows,andColumnsCollectionsEfficiently.466.5UsingSharedRows.466.6PreventingRowsfromBecomingUnshared.47附录A–常见问题:...491.如何使指定的单元格不可编辑?.492.如何让一个单元格不可用?.493.如何避免用户将焦点设置到指定的单元格?...514.如何使所有单元格总是显示控件(不论它是否处于编辑状态)?.515.Whydoesthecelltextshowupwith“square”characterswheretheyshouldbenewlines?.516.如何在单元格内同时显示图标和文本?...517.如何隐藏一列?...538.如何避免用户对列排序?...539.如何针对多个列排序?.5410.如何为编辑控件添加事件处理函数?.5811.应在何时移除编辑控件的事件处理函数?.5812.如何处理ComboBox列中ComboBox控件的SelectIndexChanged事件?.5813.如何通过拖放调整行的顺序?...5914.如何调整最后一列的宽度使其占据网格的剩余客户区?...6015.如何让TextBox类型的单元格支持换行?.6016.如何使Image列不显示任何图像(字段值为null时)?.6117.如何能够在ComboBox类型的单元格中输入数据?.6118.HowdoIhaveacomboboxcolumndisplayasubsetofdatabaseduponthevalueofadifferentcomboboxcolumn?6119.如何在用户编辑控件的时候(而不是在验证时)就显示错误图标?.6220.如何同时显示绑定数据和非绑定数据?...6521.HowdoIshowdatathatcomesfromtwotables?.6622.如何显示主从表?...6623.如何在同一DataGridView中显示主从表?...6824.如何避免用户对列排序?.6825.如何在点击工具栏按钮的时候将数据提交到数据库?...6826.如何在用户删除记录时显示确认对话框?...681何为DataGridView通过DataGridView控件,可以显示和编辑表格式的数据,而这些数据可以取自多种不同类型的数据源。DataGridView控件具有很高的的可配置性和可扩展性,提供了大量的属性、方法和事件,可以用来对该控件的外观和行为进行自定义。当你需要在WinForm应用程序中显示表格式数据时,可以优先考虑DataGridView(相比于DataGrid等其它控件)。如果你要在小型网格中显示只读数据,或者允许用户编辑数以百万计的记录,DataGridView将为你提供一个易于编程和良好性能的解决方案。DataGridView用来替换先前版本中的DataGrid,拥有较DataGrid更多的功能;但DataGrid仍然得到保留,以备向后兼容和将来使用。如果你要在两者中选择,可以参考下面给出的DataGrid和DataGridView之间区别的细节信息。1.1DataGridView和DataGrid之间的区别DataGridView提供了大量的DataGrid所不具备的基本功能和高级功能。此外,DataGridView的结构使得它较之DataGrid控件更容易扩展和自定义。下表描述了DataGridView提供而DataGrid未提供的几个主要功能。DataGridView功能描述多种列类型与DataGrid相比,DataGridView提供了更多的内置列类型。这些列类型能够满足大部分常见需要,而且比DataGrid中的列类型易于扩展或替换。多种数据显示方式DataGrid仅限于显示外部数据源的数据。而DataGridView则能够显示非绑定的数据,绑定的数据源,或者同时显示绑定和非绑定的数据。你也可以在DataGridView中实现virtualmode,实现自定义的数据管理。用于自定义数据显示的多种方式DataGridView提供了很多属性和事件,用于数据的格式化和显示。比如,你可以根据单元格、行和列的内容改变其外观,或者使用一种类型的数据替代另一种类型的数据。用于更改单元格、行、列、表头外观和行为的多个选项DataGridView使你能够以多种方式操作单个网格组件。比如,你可以冻结行和列,避免它们因滚动而不可见;隐藏行、列、表头;改变行、列、表头尺寸的调整方式;为单个的单元格、行和列提供工具提示(ToolTip)和快捷菜单。唯一的一个DataGrid提供而DataGridView未提供的特性是两个相关表中数据的分层次显示(比如常见的主从表显示)。你必须使用两个DataGridView来显示具有主从关系的两个表的数据。1.2DataGridView的亮点下表着重显示了DataGridView的主要特性,稍后会介绍它们的详细信息。DataGridView控件特性描述多种列类型DataGridView提供有TextBox、CheckBox、Image、Button、ComboBox和Link类型的列及相应的单元格类型。多种数据显示方式DataGrid仅限于显示外部数据源的数据。而DataGridView则能够显示非绑定的数据,绑定的数据源,或者同时显示绑定和非绑定的数据。你也可以在DataGridView中实现virtualmode,实现自定义的数据管理。自定义数据的显示和操作的多种方式DataGridView提供了很多属性和事件,用于数据的格式化和显示。此外,DataGridView提供了操作数据的多种方式,比如,你可以:对数据排序,并显示相应的排序符号(带方向的箭头表示升降序)对行、列和单元格的多种选择模式;多项选择和单项选择以多种格式将数据拷贝到剪贴板,包括text,CSV(以逗号隔开的值)和HTML改变用户编辑单元格内容的方式用于更改单元格、行、列、表头外观和行为的多个选项DataGridView使你能够以多种方式操作单个网格组件。比如,你可以:冻结行和列,避免它们因滚动而不可见;隐藏行、列、表头;改变行、列、表头尺寸的调整方式;改变用户对行、列、单元格的选择模式;为单个的单元格、行和列提供工具提示(ToolTip)和快捷菜单。自定义单元格、行和列的边框样式。提供丰富的可扩展性的支持DataGridView提供易于对网格进行扩展和自定义的基础结构,比如:处理自定义的绘制事件可以为单元格、