Net datagridview cellvalidating

03-Mar-2020 10:57

Advanced Cell Border Style属性。如示例: ' 单元格的上边和左边线设为二重线 ' 单元格的下边和右边线设为单重线 Data Grid View1. Allow Add 属性为 False 来达到同样的效果。 Data Grid View 判断新增行: Data Grid View的Allow User To Add Rows属性为True时也就是允许用户追加新行的场合下,Data Grid View的最后一行就是新追加的行(*行)。使用 Data Grid View Row. New Row Index 可以获取新行的行序列号。在没有新行的时候,New Row Index = -1。 If (Data Grid View1. Remove 还是可以进行行的删除。 补足: 如果 Data Grid View 绑定的是 Data View 的话,通过 Data View. Remove At(0); 4) 删除选中行 foreach (Data Grid View Row r in Data Grid View1. Grid Color 属性来设定的。默认是 Control Dark Dark 。但是只有在 Cell Border Style 被设定为 Single、Single Horizontal、Single Vertical 的条件下才能改变其边框线的颜色。同样,Column Headers Border Style 以及 Row Headers Border Style 只有在被设定为 Single 时,才能改变颜色。 4) 单元格的上下左右的边框线式样的单独设定 Cell Border Style只能设定单元格全部边框线的式样。要单独改变单元格某一边边框式样的话,需要用到Data Grid View. Add 为 Data Grid View 追加新行。 补足: 如果 Data Grid View 的 Data Source 绑定的是 Data View, 还可以通过设置 Data View. Allow User To Delete Rows = false; 但是,通过 Data Grid View Row Collection. C#针对datagridview 操作收集的一些资料,内容比较乱,以后再整理 C#对Data Grid View进行添加、修改、删除数据操作 数据库用的是本地服务器(My Sql): 设定全局变量: My Sql Connection conn; My Sql Data Adapter adapter; My Sql Transaction trans; 1. Auto Resize Columns(Data Grid View Auto Size Columns Mode. All Cells; // 设定包括Header和所有单元格的行高自动调整 Data Grid View1. de 若要重写控件的列大小的单个列模式,将其Auto Size Mode属性的值比Not Set等。一列大小调整模式实际上是取决于它的Inherited Auto Size Mode财产。这个属性的值是基于列的Auto Size Mode属性值,除非该值是Not Set,在这种情况下控制的Auto Size Columns Mode值继承。 请谨慎使用基于内容的自动调整大小时,大量数据的工作。为了避免性能下降,使用自动调整大小模式,而不是分析计算中的每一行控制的基础上所显示的行唯一的大小。为获得最佳性能,使用编程调整大小,而不是让你在特定的时间可以调整,如新的数据后立即加载。 基于内容的自动调整大小模式不会影响行,列或标题,你已经通过设置行或列的Visible属性或控制Row Headers Visible或Column Headers Visible属性为false隐藏。例如,如果列是隐藏后,它会自动调整以适应一个大单元格的值,隐藏的列将不会改变它的大小,如果大所在的行单元格的值将被删除。自动调整大小时,不会出现能见度的变化,因此更改列的Visible属性返回true,将不会强迫它重新计算其大小的当前内容为基础。 方案内容为基础的大小影响的行,列和标题不论其知名度。 5.3.4编程调整大小 禁用自动调整大小时,您可以通过编程设置精确的宽度通过下列属性或行,列或标题的高度: ? 准通过所提供的边框样式: 边框值描述 Fixed3D一个三维边框。 Fixed Single单行边框。 无无边框。 5.7.2高级边境风格 Data Grid View控件允许你完全自定义其外观,包括细胞和头的边界。 Data Grid View的有Cell Border Style,Column Headers Border Style和Row Headers Border Style属性,让您设置单元格边框的外观。但是,如果您需要进一步定制边界,Data Grid View Advanced Border Style类允许您设置单元格的个人双方的边框样式。对Data Grid View Advanced Border Style左,右,顶部和底部属性代表左,右,上,一个细胞和底部边框,分别为。您可以设置在Advanced Cell Border Style,Advanced Column Headers Border Style,Advanced Row Headers Border Style Data Grid View的属性这些属性产生的细胞之间的边界,展现多种风采。 下表列出了可用的先进的边框样式,可以设置为左,右,顶部和底部部分。请注意,某些组合是无效的。 边框值描述 嵌入一?? Get Clipboard Content检索()方法为个别单元格的值。你可以重写派生类中任一这些方法或两个自定义复制的单元格的布局,或支持格式的其他数据。 5.10冻结的列/行 当用户查看数据有时他们需要参考一列或列集频繁。例如,当显示的客户信息表,其中包含许多列,显示是非常有用的在任何时候,客户名称,同时使其他列可见区域之外的滚动。 为了实现这一行为,您可以冻结在控制列。这是通过设置在列或行冻结的财产。当你冻结一列,所有列在它的左边(或在从右到左的语言脚本右),冻结。冻结列留在原地,而所有其他列可以滚动。行以类似的方式行事:前行中的所有行被冻结的冻结,以及维持不变,而在非冰冻行可以滚动。 5.11实现自定义和编辑控制细胞/细胞 您可以实现在你的派生类来创建一个细胞的细胞类型具有编辑功能,但不承载的编辑模式控制IData Grid View Editing Cell接口。要创建一个控件,你可以在一个宿主细胞中的编辑模式,可以实现从Control派生的类IData Grid View Editing Control接口。 5.11.1 IData Grid View Editing Control 支持先进的单元格编辑功能通常使用一个托管控件是从Windows窗体控件派生的。此接口由编辑控件,如Data Grid View Combo Box Editing Control和Data Grid View Text Box Editing Control,这是由相应的Data Grid View单元格,如的Data Grid View Combo Box Cell和Data Grid View Text Box Cell,当他们处于编辑模式主持。 单元格可以承载编辑控件设置其Edit Type属性类型,表示一个类型的编辑控件的类型。 5.11.2 IData Grid View Editing Cell 此接口的类没有提供存取指定的编辑控制值的用户界面(UI)。在这种情况下用户界面显示无论是在细胞处于编辑模式。该Data Grid View Check Box Cell的是一个细胞,它实现了IData Grid View Editing Cell接口的例子。 其他细胞类型,如的Data Grid View Button Cell,提供一个用户界面,但不存储用户指定的值。在这种情况下,细胞类型不落实IData Grid View Editing Cell或主机一个编辑控制。 5.12虚拟模式 使用虚拟模式,您可以管理之间的Data Grid View控件和自定义数据缓存交互。为了实现虚拟模式,设置Virtual Mode属性为true,并处理一个或本主题描述的事件更多。您通常处理至少Cell Value Needed事件,它使控件的外观在数据缓存值。 5.12.1绑定模式和虚拟模式 虚拟模式只有当你需要补充或替换绑定模式。在绑定模式下,可以设置Data Source属性和控制自动加载从指定的源数据和提交给它的用户更改回来。您可以控制?? 确保该行的index Source参数指定当呼叫可以共享的行集合Add Copy,Add Copies,Insert Copy和Insert Copies方法。 ? Collection Changed或Row State Changed事件。这些事件会导致行成为非共享。另外,不要叫Data Grid View Row Collection. 不要调用Sort方法的Sort(IComparer接口)超载。一个自定义比较排序会导致所有行成为非共享。 附录 A – FAQ 该附录包含的代码示例和片段集中解答了前面散落的常见问题: 1. Read Only属性决定了单元格中的数据是否可以编辑,可以设置单元格的Read Only 属性,也可以设置Data Grid View Row. Read Only使得一行或一列所包含的单元格都是只读的。 默认情况下,如果一行或一列是只读的,那么其包含的单元格也会使只读的。 不过你仍可以操作一个只读的单元格,比如选中它,将其设置为当前单元格,但用户不能修改单元格的内容。注意,即使单元格通过Read Only属性设置为只读,仍然可以通过编程的方式修改它,另外Read Only也不会影响用户是否可以删除行。 2. 单元格可以设置为只读而不可编辑,但Data Grid View却没提供使单元格不可用的支持。一般意义上,不可用意味着用户不能进行操作,通常会带有外观的暗示,如灰色。没有一种简单的方法来创建那种不可操作的单元格,但提供一个暗示性的外观告诉用户某单元格不可用还是可行的。内置的单元格类型没有进行不可用设置的属性,下面的例子扩展了Data Grid View Button Cell ,参照常见控件的Enabled属性,为其添加了Enabled属性,如果该属性设置为false,那么其外观状态将类似于普通按钮的不可用状态。 public class Data Grid View Disable Button Column : Data Grid View Button Column public class Data Grid View Disable Button Cell : Data Grid View Button Cell 3. 如何隐藏一列? 有时希望仅显示Data Grid View的部分列,将其它列隐藏。比如Data Grid View含有一列包含员工薪水信息,你可能希望仅将这些信息显示给具有一定信用级别的人,其他人则隐藏。 通过编程方式隐藏 Data Grid View Column类的Visible 属性决定了是否显示该列。 通过设计器隐藏 1) 右击Data Grid View控件,选择Edit Columns; 2) 在列列表中选择一列; 3) 在列属性网格中,将Visible属性设置为false。 8. 默认情况下Data Grid View不支持针对多列排序。下面针对是否将数据绑定到Data Grid View来分别演示如何为其添加多列排序功能。 9.1 将数据绑定到Data Grid View时 Data Grid View进行数据绑定的时候,数据源(如Data View)可对多个列排序。Data Grid View会保留这种排序,但只有第一个排序列会显示排序符号(向上或向下的箭头),此外Sorted Column属性也只会返回第一个排序列。 一些数据源内置了对多列排序的支持。如果你的数据源实现了IBinding List View接口,提供了对Sort属性的支持,那么该数据源就支持多列排序。为了明确指出Data Grid View对多列排序,手动为已排序列设置正确的Sort Glyph Direction属性,指示该列已经排序。 下面这个示例使用Data Table作为数据源,使用其Default View的 Sort 属性对第二列和第三列排序;该示例同时演示了如何设置列的Sort Glyph Direction属性。该示例假定在你的窗体上有一个Data Grid View控件和一个Binding Source组件: Data Table dt = new Data Table(); dt. //修改数据,并将数据提交到数据库 private Boolean db Update() { string str Sql = "select Products Spec ID, Products Spec, Products Spec Unit, Products ID from tbl_product_detail_master"; System. Auto Size To All Headers; 4) 随时自动调整 a, 临时的,让列宽自动调整,这和指定Auto Size Columns Mode属性一样。 // 让 Data Grid View1 的所有列宽自动调整一下。 Data Grid View1. Auto Size Columns Mode = Data Grid View Auto Size Columns Mode. ntal和Single Vertical值。这些枚举的其他值使用由操作系统指定的颜色。此外,当视觉样式的Windows XP及以上的启用,Grid Color属性值不被使用。 5.7.1标准边框样式 边框样式控制标准通过Cell Border Style,Row Headers Border Style和Column Headers Border Style属性。 下表列出了标?? 单元格,行,列的Read Only属性和控制,都设置为false。 在编辑模式下,用户可以更改单元格的值,然后按Enter键提交更改或ESC细胞恢复到其原始值。 您可以配置一个Data Grid View控件,以使单元格进入编辑模式,一旦它成为当前单元格。该ENTER键和ESC键的行为在这种情况下保持不变,但细胞仍然处于编辑模式后,该值被提交或还原。您还可以配置控制,使细胞进入编辑模式仅当用户键入单元格或只有当用户按下F2键。最后,您可以阻止其进入编辑,除非你调用Begin Edit方法模式细胞。 下表描述了不同的编辑模式可供选择: 编辑模式值描述 Edit On Enter编辑开始时,细胞接收焦点。这种模式是有用的当按下TAB键,进入跨越行值,或当按下回车键,进入下一个列值。 Edit On F2编辑开始时按下F2键时,单元格具有焦点。此模式放置在单元格内容的末尾的选择点。 开始编辑Edit On Keystroke当任何字母数字键被按下,而细胞具有焦点。 Edit On Keystroke Or F2编辑开始时,任何字母数字键或F2键被按下,而细胞具有焦点。 Edit Programmatically编辑时,才开始Begin Edit方法被调用。 5.9剪贴板拷贝模式 当你使细胞复制,你才能在Data Grid View控件的数据很容易接触到其他应用程序通过剪贴板。 Data Grid View控件复制到选定的单元格的每个剪贴板的文本表示。此值是单元格的值转换为图像细胞,Description属性的值的字符串或。其内容后加入为制表符分隔的文本值的剪贴簿在诸如记事本和Excel应用程序粘贴,并作为应用程序,如Word粘贴到HTML格式的表格。 您可以配置单元格值复制到复制只,包括在剪贴板上的数据行和列标题文本,或包含标题文本仅当用户选择整个行或列。 下表列出了不同的剪贴板复制模式: 剪贴板拷贝模式说明 禁用复制到剪贴板被禁用。 Enable Always Include Header Text所选单元格的文本值可以被复制到剪贴板。标题文字是否列入行和包含选定单元格的列。 Enable With Auto Header Text所选单元格的文本值可以被复制到剪贴板。行或列标题的文本包含或包含的行只选择当Selection Mode属性设置为Row Header Select或Column Header Select和至少一个头被选中单元格的列。 Enable Without Header Text所选单元格的文本值可以被复制到剪贴板。标题文字是否不包括在内。 在选择模式的不同,用户可以选择多个不连续的细胞群。当用户复制到剪贴板细胞,行和列,没有选定的单元格不会被复制。所有其他行或列成为复制到剪贴板上的数据表的行和列。在这些行或列未选定的单元格被复制到剪贴板作为空白占位符。 当用户复制内容时,Data Grid View控件添加到剪贴板Data Object中。此数据对象是取自Get Clipboard Content()方法。你可以调用这个方法时,您希望以编程方式将数据添加对象到剪贴板。该Get Clipboard Content()方法通过调用Data Grid View Cell. This can be controlled via the Wrap Mode property on the cell style (e.g. Padding 属性来调整文本的位置,重写了Paint 方法来绘制图片。该示例可以得到简化,方法是处理Cell Painting 事件,在这里实现类似的功能。 public class Text And Image Column: Data Grid View Text Box Column public class Text And Image Cell : Data Grid View Text Box Cell 7. Visual Basic 2005 Express Editions bɂȂ܂B Data Grid ViewŃZɒl͂閈ɃG[`Fb Ns A Ȃꍇ́AZJڂ̃ZɃt H[JX߂ ҏW[hŃe LXg SIԂɂƂsłB Private Sub Data Grid View1_Cell Validating( _ By Val sender As Object, _ By Val e As System. Data Grid View Cell Validating Event Args) _ Handles Data Grid View1. Formatted Value = "" Then Exit Sub End If Select Case e. All Cells); // 让 Data Grid View1 的第一列的列宽自动调整一下。 Data Grid View1. Auto Size Rows Mode = Data Grid View Auto Size Rows Mode. 个三维边框。 Inset Double单行边框。 无无边框。 Not Set边界是没有设置 一开始就是单行凸起边框 Outset Double一个双线凸起边框 Outset Partial单行边界包含凸起部分 单单行边界 5.8输入,编辑模式 默认情况下,用户可以通过在编辑,或按F2键当前Data Grid View的文本框格的内容。这使得在编辑模式下,如果下列条件全部得到满足手机: ? 哪些绑定列的显示方式,和一般的数据源本身处理,如排序操作。 5.12.2补充绑定模式 您可以通过显示补充随着绑定列绑定列绑定模式。这有时也被称为“混合模式”,是用来显示像计算值或用户界面(UI)控制的东西有用。 由于未绑定列之外的数据源,他们是忽视了数据源的排序操作。因此,当您在混合模式下启用排序,你必须管理一个本地缓存中绑定数据,并实现虚拟模式,让Data Grid View控件交互。 5.12.3常见问题及案例 1)如何显示绑定的数据绑定以及数据? 2)我怎样的数据显示,从两个表来? 5.12.4更换绑定模式 如果绑定模式无法满足您的性能需求,您可以通过虚拟管理模式的自定义事件处理程序缓存中的所有数据。例如,你可以使用虚拟模式来实现一个公正的实时数据加载的机制,只是从一个网络数据库,获得最佳性能所必需的数据检索。这种情况是非常有用的大量时,通过速度较慢的网络连接或与客户机的数据有一个内存或存储空间有限的工作。 5.12.5虚拟模式事件 如果您的数据是只读的,Cell Value Needed事件可能是唯一的事件,你将需要处理。额外的虚拟模式事件让你启用特定的功能,如用户编辑,添加和删除行和行级的交易。 一些标准的Data Grid View事件(如发生的事件当用户添加或删除行,或在编辑单元格值时,解析,验证,或者格式化)在虚拟模式中非常有用,以及。你也可以处理事件,让你保持在一个通常不绑定的数据源中存储的值,如细胞提示文本,单元格和行的错误文本,单元格和行的快捷菜单数据,和行高的数据。 下列事件发生时,才Virtual Mode属性设置为true。 事件描述 Cell Value Needed由控制用于检索从显示数据高速缓存单元格的值。此事件只发生在未绑定列细胞。 Cell Value Pushed由控制用于提交,可以向用户输入的数据高速缓存单元。此事件只发生在未绑定列细胞。 调用方法时Update Cell Value更改之外的Cell Value Pushed事件处理缓存值,以确保当前值显示在控件中的作用,并适用于目前所有自动调整大小模式。 New Row Needed由控件用来指示一个数据高速缓存中的新行的需要。 Row Dirty State Needed的控制,用来确定行是否有任何未提交的更改。 Cancel Row Edit使用的控制,表明该行应恢复其缓存的值。 以下事件在虚拟模式中非常有用,但也可以使用了Virtual Mode属性设置无关。 事件的说明 User Deleting Row User Deleted Row Rows Removed Rows Added由控件用来指示行被删除或添加,让您更新相应的数据高速缓存。 Cell Formatting Cell Parsing Cell Validating Cell Validated Row Validating Row Validated使用的显示格式为单元格值和解析和验证用户输入控制。 Cell Tool Tip Text Needed由控制单元用于检索工具提示文本当Data Source属性设置或Virtual Mode属性为true。 工具提示显示细胞只有在Show Cell Tool Tips属性值为true。 Cell Error Text Needed Row Error Text Needed的控制,用来检索单元格或行的错误文本当Data Source属性设置或Virtual Mode属性为true。 调用方法或Update Row Error Text Update Cell Error Text方法,当你更改单元格或行的错误文本,以确保当前值在控件中显示。 细胞与行的错误标志符号时显示Show Cell Errors和Show Row Errors属性值是正确的。 Cell Context Menu Strip Needed Row Context Menu Strip Needed由控制用于检索单元格或行的Context Menu Strip当控件的Data Source属性设置或Virtual Mode属性为true。 Row Height Info Needed Row Height Info Pushed由控制用于检索或存储数据的高速缓存行中高度信息。调用方法时改变Update Row Height Info缓存行之外的Row Height Info Pushed事件处理的高度信息,以确保当前值在控制显示器使用。 5.12.6在虚拟模式下的最佳实践 如果要实现虚拟模式,以工作效率的大量数据,你也想确保您正在使用Data Grid View控件本身的效率。请参阅下面的最佳做法的信息 5.13容量(容量) 一般来说,在Data Grid View没有硬编码容量限制。网格的设计,使越来越多的内容可以添加的机器变得更快,并有更多的内存。尽管如此,格并不是用来处理大量列。如果您添加超过300行,您会开始注意到在随着我们对电网的表现却不是这样的优化性能的退化。如果你需要一个大量的列格,然后在Data Grid View可能不符合您的需求。关于支持的行数时,Data Grid View是受内存限制。当使用虚拟模式,您可以轻松支持超过200万行。看看你可以做的事情(不要做),以提高内存的使用情况和性能的最佳做法的信息,下面一节。 6个最佳实践(最佳做法) Data Grid View控件的设计提供最大的可扩展性。如果你需要显示大量数据,你应该按照本主题中所述,以避免内存或有辱人格的用户界面(UI)的响应消耗大量的指导方针。 6.1使用高效单元格样式 每个单元格,行和列可以有自己的样式信息。样式信息存储在Data Grid View Cell Style对象。创造许多个人Data Grid View元素单元格样式的对象可以是低效的,特别是当大量数据的工作。为了避免性能的影响,请遵循下列准则: ? Style财产。访问Style属性创建一个Data Grid View Cell Style类的新实例如果该属性还没有被使用。此外,这个对象可能不包含完整的样式为单元格的信息,如果有些样式从行,列或控件继承。欲了解更多有关单元格样式继承的详细信息,请参阅细胞在Windows窗体Data Grid View控件样式。 6.2使用高效快捷菜单 每个单元格,行和列可以有它自己的快捷菜单。在Data Grid View控制快捷菜单Context Menu Strip控件代表。这正好与单元格样式对象作为,创造许多个人Data Grid View元素的快捷菜单将产生负面影响性能。为了避免这种损失,请使用下列准则: ? 请确定指定的行或列时,可以共享调用Add(的Data Grid View Row)Add方法的重载,Add Range方法,插入(Int32的,的Data Grid View Row)方法重载的插入,和Rows集合Insert Range方法。 要确定行是否是共享的,使用Data Grid View Row Collection. On Collection Changed(Collection Change Event Args)或On Row State Changed(智力,Data Grid View Row State Changed Event Args)方法,提高了这些事件。 ? 如何避免用户将焦点设置到指定的单元格? 默认情况下Data Grid View的操作(navigation)模型在限制用户将焦点置于指定的单元格方面没有提供任何支持。你可以实现自己的操作逻辑,这需要重写合适的键盘、导航、鼠标方法,如Data Grid View. 如何避免用户对列排序? 对于Data Grid View 控件,默认情况下,Text Box类型的列会自动排序,而其它类型的列则不会自动排序。这种自动排序有时会把数据变得比较乱,这时你会想更改这些默认设置。 Data Grid View Column的属性Sort Mode决定了列的排序方式,将其设置为Data Grid View Column Sort Mode. Auto Resize Column(0, Data Grid View Auto Size Column Mode. Auto Resize Columns() b,临时的,让行高自动调整 // 让 Data Grid View1 的所有行高自动调整一下。 Data Grid View1. Fill Weight = 30; //第三列的相对宽度为30% 这里的值是相对于Data Grid View当前的总宽度的,所以窗体最大化和缩小的效果是不一样的,但比例不变 注:如何给每列设置标头 设置标题字段(先把Columns Headers Visible设置为true) Grid View. All Cells; ---------- 在winform中,使用Data Grid View时,想在某一列,值为“true”时,将这列颜色改变,并且将值也改变,需要用到如下方法: private void gdv Data_Cell Formatting(object sender, Data Grid View Cell Formatting Event Args e) ---------- Data Grid View控件 Data Grid View是用于Windows Froms 2.0的新网格控件。它可以取代先前版本中Data Grid控件,它易于使用并高度可定制,支持很多我们的用户需要的特性。 1 何为Data Grid View 通过Data Grid View控件,可以显示和编辑表格式的数据,而这些数据可以取自多种不同类型的数据源。 Data Grid View控件具有很高的的可配置性和可扩展性,提供了大量的属性、方法和事件,可以用来对该控件的外观和行为进行自定义。当你需要在Win Form应用程序中显示表格式数据时,可以优先考虑Data Grid View(相比于Data Grid等其它控件)。如果你要在小型网格中显示只读数据,或者允许用户编辑数以百万计的记录,Data Grid View将为你提供一个易于编程和良好性能的解决方案。 Data Grid View 用来替换先前版本中的Data Grid,拥有较Data Grid更多的功能;但Data Grid仍然得到保留,以备向后兼容和将来使用。如果你要在两者中选择,可以参考下面给出的Data Grid 和Data Grid View之间区别的细节信息。 1.1 Data Grid View和Data Grid 之间的区别 Data Grid View提供了大量的Data Grid所不具备的基本功能和高级功能。此外,Data Grid View 的结构使得它较之Data Grid控件更容易扩展和自定义。 下表描述了Data Grid View提供而Data Grid未提供的几个主要功能。 Data Grid View功能 描述 多种列类型 与Data Grid相比,Data Grid View 提供了更多的内置列类型。这些列类型能够满足大部分常见需要,而且比Data Grid中的列类型易于扩展或替换。 多种数据显示方式 Data Grid仅限于显示外部数据源的数据。而Data Grid View则能够显示非绑定的数据,绑定的数据源,或者同时显示绑定和非绑定的数据。你也可以在Data Grid View中实现virtual mode,实现自定义的数据管理。 用于自定义数据显示的多种方式 Data Grid View提供了很多属性和事件,用于数据的格式化和显示。比如,你可以根据单元格、行和列的内容改变其外观,或者使用一种类型的数据替代另一种类型的数据。 用于更改单元格、行、列、表头外观和行为的多个选项 Data Grid View使你能够以多种方式操作单个网格组件。比如,你可以冻结行和列,避免它们因滚动而不可见;隐藏行、列、表头;改变行、列、表头尺寸的调整方式;为单个的单元格、行和列提供工具提示(Tool Tip)和快捷菜单。 唯一的一个Data Grid提供而Data Grid View未提供的特性是两个相关表中数据的分层次显示(比如常见的主从表显示)。你必须使用两个Data Grid View来显示具有主从关系的两个表的数据。 1.2 Data Grid View的亮点 下表着重显示了Data Grid View的主要特性,稍后会介绍它们的详细信息。 Data Grid View控件特性 描述 多种列类型 Data Grid View提供有Text Box、Check Box、Image、Button、Combo Box和Link类型的列及相应的单元格类型。 多种数据显示方式 Data Grid仅限于显示外部数据源的数据。而Data Grid View则能够显示非绑定的数据,绑定的数据源,或者同时显示绑定和非绑定的数据。你也可以在Data Grid View中实现virtual mode,实现自定义的数据管理。 自定义数据的显示和操作的多种方式 Data Grid View提供了很多属性和事件,用于数据的格式化和显示。 此外,Data Grid View提供了操作数据的多种方式,比如,你可以: 对数据排序,并显示相应的排序符号(带方向的箭头表示升降序) 对行、列和单元格的多种选择模式;多项选择和单项选择 以多种格式将数据拷贝到剪贴板,包括text,CSV (以逗号隔开的值) 和 HTML 改变用户编辑单元格内容的方式 用于更改单元格、行、列、表头外观和行为的多个选项 Data Grid View使你能够以多种方式操作单个网格组件。比如,你可以: 冻结行和列,避免它们因滚动而不可见; 隐藏行、列、表头; 改变行、列、表头尺寸的调整方式; 改变用户对行、列、单元格的选择模式; 为单个的单元格、行和列提供工具提示(Tool Tip)和快捷菜单。 自定义单元格、行和列的边框样式。 提供丰富的可扩展性的支持 Data Grid View提供易于对网格进行扩展和自定义的基础结构,比如: 处理自定义的绘制事件可以为单元格、列和行提供自定义的观感; 继承一个内置的单元格类型以为其提供更多的行为; 实现自定义的接口以提供新的编辑体验。 2 Data Grid View的结构 Data Grid View及其相关类被设计为用于显示和编辑表格数据式数据的灵活的、可扩展的体系。这些类都位于system. Forms命名空间,它们的名称也都有共同的前缀"Data Grid View"。 2.1 结构元素(Architecture Elements) 主要的Data Grid View相关类继承自Data Grid View Element类。 Data Grid View Element类有两个属性,一是Data Grid View,该属性提供了对其所属的Data Grid View的引用;二是State,该属性表示当前的状态,其值为Data Grid View Element States枚举,该枚举支持位运算,这意味着可以设置组合状态。 2.2 单元格和组(Cells and Bands) Data Grid View由两种基本的对象组成:单元格(cell)和组(band)。所有的单元格都继承自Data Grid View Cell基类。 两种类型的组(或称集合)Data Grid View Column和Data Grid View Row都继承自Data Grid View Band 基类,表示一组结合在一起的单元格。 Data Grid View会与一些类进行互操作,但最常打交道的则是如下三个:Data Grid View Cell, Data Grid View Column,Data Grid View Row。 2.3 Data Grid View的单元格 (Data Grid View Cell) 单元格(cell)是操作Data Grid View的基本单位。Display is centered on cells, and data entry is often performed through cells。可以通过Data Grid View Row 类的Cells 集合属性访问一行包含的单元格,通过Data Grid View的Selected Cells集合属性访问当前选中的单元格,通过Data Grid View的Current Cell属性访问当前的单元格。 Data Grid View Cell 类图 Cell 相关类和属性 Data Grid View Cell是一个抽象基类,所有的单元格类型都继承于此。Data Grid View Cell及其继承类型并不是Windows Forms控件,但其中一些宿主于Windows Forms控件。单元格支持的编辑功能通常都由其宿主控件来处理。 Data Grid View Cell对象不会像Windows Forms控件那样控制自己的外观和绘制(painting)特征,相反的,Data Grid View会负责其包含的单元格的外观。通过Data Grid View 控件的属性和事件,你可以深刻地影响单元格的外观和行为。如果你对单元格定制有特殊要求,超出了Data Grid View提供的功能,可以继承Data Grid View Cell或者它的某个子类来满足这些要求。 2.3.1 Data Grid View Cell的工作机制 理解Data Grid View结构的一个重要部分是理解Data Grid View Cell的工作机制: 单元格的值(A Cell’s Value) 单元格的值是其根本所在。如果单元格所在列不是绑定列,并且所在的Data Grid View也不是Virtual Mode,那么它的值就由它本身所持有并维护。对于那些由绑定产生的单元格,它们压根儿就不“知道”该持有什么值,当然也就不会去维护了;当Data Grid View需要单元格的值的时候,它会到数据源中查询该单元格应当显示的值。在Virtual Mode下,除了会触发Cell Value Needed事件以获取相应单元格的值外,与数据绑定方式非常相似。在单元格级,所有这些由Data Grid View Cell. 避免为单个Data Grid View Cell或Data Grid View Row对象的单元格样式属性。这包括由Row Template行对象属性中指定。每个新行是从行模板克隆将接收其模板的单元格样式对象的副本。为了获得最大的可扩展性,设置在Data Grid View的单元格样式属性的水平。例如,设置Default Cell Style属性,而不是Data Grid View Cell. 如果某些细胞需要的格式以外的默认格式,在使用相同的单元格,行或列组的Data Grid View Cell Style实例。避免直接设置个别类型的单元格,行和列Data Grid View Cell Style属性。对于一个单元格样式共享的例子,请参见如何:设置单元格样式的默认为Windows窗体Data Grid View控件。您也可避免性能下降时,通过处理Cell Formatting设置事件处理个别单元格样式。有关示例,请参见如何:自定义的数据格式在Windows窗体Data Grid View控件。 ? 避免为单个单元格和行的快捷菜单。这包括行模板,这是克隆了它的快捷方式菜单时,新行被添加到控件一起。为了获得最大的可扩展性,仅使用控件的Context Menu Strip属性来指定整个控制单一的快捷菜单。 ? 如果您需要多个行或多种细胞的快捷菜单,处理Cell Context Menu Strip Needed或Row Context Menu Strip Needed事件。这些事件让您管理自己的快捷菜单对象,让您调整性能。 6.3使用自动调整大小高效 行,列和标题可以自动调整大小的单元格内容的变化,使细胞中的全部内容都没有剪辑显示。更改调整大小模式也可以调整行,列和标题。要确定正确的大小,Data Grid View控件必须检查每一个细胞,它必须适应值。当处理大量数据时,这种分析可以产生负面影响控制性能的自动调整大小时发生。为了避免性能下降,请遵循下列准则: ? de,Data Grid View Auto Size Columns Mode和Data Grid View Auto Size Column Mode枚举的Displayed Cells或Displayed Cells Except Headers领域。 ? Shared Row(int)方法来检索行对象,然后检查对象的Index属性。共享行总是为-1 Index属性值。 6.6防止行成为非共享 共享成为非共享行可以作为一个代码或用户操作的结果。为了避免影响性能,你应该避免造成行成为非共享。在应用开发,你可以处理Row Unshared事件来确定行成为非共享。这是非常有用的调试行共享问题。 为了防止行成为非共享,请使用下列准则: ? Shared Row(int)方法并传入行的实际索引。请注意,但是,修改一个共享行对象通过此方法检索将修改所有行共享此对象。在新记录行不共享,所以这是不会受到影响,当您修改任何其他行中的其他行。还要注意的是一个共享行代表不同的行可能有不同的快捷菜单。以检索共享行实例的正确快捷菜单中,使用Get Context Menu Strip方法并传入行的实际索引。如果您访问共享行的Context Menu Strip属性,而是将使用-1共享行的索引,将不检索正确的快捷菜单。 ? Cells集合。访问一个细胞将直接导致其父行成为非共享,实例化一个新的Data Grid View Row。为细胞相关的事件处理程序接收单元属性,你可以用它来操作不会导致行成为非共享细胞事件参数对象。您也可以使用Current Cell Address属性来检索,而不用访问细胞直接当前单元格的行和列索引。 ? 不访问Selected Cells集合时Selection Mode属性值是Full Column Select,Column Header Select,Full Row Select或Row Header Select。这会导致所有行成为非共享选择。 ?

X 。这对于避免取消共享行的共享非常有用。 当前的单元格可以通过设定 Data Grid View 对象的 Current Cell 来改变。可以通过 Current Cell 来设定 Data Grid View 的激活单元格。将 Current Cell 设为 Nothing(null) 可以取消激活的单元格。 // 设定 (0, 0) 为当前单元格 Data Grid View1.

User Deleting Row 事件。 在这个事件里,可以判断条件并取消删除操作。 // Data Grid View1 的 User Deleting Row 事件 private void Data Grid View1_User Deleting Row( object sender, Data Grid View Row Cancel Event Args e) Data Grid View 行、列的隐藏和删除: 1) 行、列的隐藏 // Data Grid View1的第一列隐藏 Data Grid View1. Visible = false; // Data Grid View1的第一行隐藏 Data Grid View1. Visible = false; 2) 行头、列头的隐藏 // 列头隐藏 Data Grid View1. Allow User To Resize Columns = false; //禁止用户改变Data Grid View1の所有行的行高 Data Grid View1. False; // 禁止用户改变Data Grid View1的第一列的行宽 Data Grid View1. Not Set 时, 实际上会默认以 Data Grid View 的 Allow User To Resize Columns 和 Allow User To Resize Rows 的属性值进行设定。比如: Data Grid View.

Count; // try // ---------------- 一、单元格内容的操作 // 取得当前单元格内容 Console. Allow Delete 也可以控制行的删除。 行删除时的条件判断处理。 用户在删除行的时候,将会引发 Data Grid View. Selected Rows) Data Grid View 禁止列或者行的Resize: 1) 禁止所有的列或者行的Resize // 禁止用户改变Data Grid View1的所有列的列宽 Data Grid View1. False; 关于 No Set 当 Resizable 属性设为 Data Grid View Tri State.

//设定Data Grid View的样式 private void set Dg Style() 3. Column Headers Height Size Mode = Data Grid View Column Headers Height Size Mode. Row Headers Width Size Mode = Data Grid View Row Headers Width Size Mode. Header Text = "标题"; ----------- // 设定包括Header和所有单元格的列宽自动调整 Data Grid View1. Sort Glyph Direction属性以显示排序标志符号。 作为对的Sort(IComparer)方法重载替代方法,可以通过实施提供了Sort Compare事件处理程序自定义排序。此事件发生在用户单击列或配置自动分拣头当调用Sort方法的Sort(Data Grid View Column,List Sort Direction)重载。事件发生时,每行一对在控制,使您能够计算它们的正确顺序。 注:Sort Compare事件不会发生当Data Source属性设置或当Virtual Mode属性值为true。 5.6.3常见问题及案例 1)如何避免用户对列排序? 2)如何针对多个列排序? 5.7边框样式 使用Data Grid View控件,您可以自定义该控件的边框和网格线,以改善用户体验的外观。您可以修改除了为细胞内控制边境网格线的颜色和样式的控件的边框样式。网格线颜色控制,通过Grid Color财产。您还可以申请普通细胞,行标题单元格和列标题单元格不同的单元格边框样式。对于先进的边框样式的Data Grid View提供先进的边框样式的属性。 注:网格线颜色仅用于与Data Grid View Cell Border Style枚举和枚举的Data Grid View Header Border Style单值单,Single Horizo?? By default, text in a Data Grid View Text Box Cell does not wrap. This is similar to setting a Text Box’s Text property to the same text when the Text Box’s Multi Line property is false. 如何在单元格内同时显示图标和文本? Data Grid View控件没有对在同一单元格内同时显示图标和文本提供支持。但通过实现自定义的绘制事件,如Cell Paint 事件,你可以轻松实现这个效果。 下面这段代码扩展了Data Grid View Text Box Column 和Data Grid View Text Box Cell类,将一个图片显示在文本旁边。这个示例使用了Data Grid View Cell Style.

Data Table(); dt Update = this.dbconn(str Sql); dt Update. Auto Size Columns Mode 属性。 3) 设定列头的高度和行头的宽度自动调整 // 设定列头的宽度可以自由调整 Data Grid View1. Compare(Object)方法,对此,作为输入传递时的Data Grid View的Sort(IComparer)方法重载被称为Data Grid View Row对象。有了这个,你可以计算出正确的行排序的基础上在任一列的值。 的Sort(IComparer)方法重载不设置Sorted Column和Sort Order的属性,所以你必须总是设置Data Grid View Column Header Cell. Why does the cell text show up with “square” characters where they should be new lines(TODO,未能实现该效果)? Because text doesn’t wrap, new line characters in the text do not apply and so they are displayed as a “non-printable” character.

X 。这对于避免取消共享行的共享非常有用。 当前的单元格可以通过设定 Data Grid View 对象的 Current Cell 来改变。可以通过 Current Cell 来设定 Data Grid View 的激活单元格。将 Current Cell 设为 Nothing(null) 可以取消激活的单元格。 // 设定 (0, 0) 为当前单元格 Data Grid View1.

User Deleting Row 事件。 在这个事件里,可以判断条件并取消删除操作。 // Data Grid View1 的 User Deleting Row 事件 private void Data Grid View1_User Deleting Row( object sender, Data Grid View Row Cancel Event Args e) Data Grid View 行、列的隐藏和删除: 1) 行、列的隐藏 // Data Grid View1的第一列隐藏 Data Grid View1. Visible = false; // Data Grid View1的第一行隐藏 Data Grid View1. Visible = false; 2) 行头、列头的隐藏 // 列头隐藏 Data Grid View1. Allow User To Resize Columns = false; //禁止用户改变Data Grid View1の所有行的行高 Data Grid View1. False; // 禁止用户改变Data Grid View1的第一列的行宽 Data Grid View1. Not Set 时, 实际上会默认以 Data Grid View 的 Allow User To Resize Columns 和 Allow User To Resize Rows 的属性值进行设定。比如: Data Grid View.

Count; // try // ---------------- 一、单元格内容的操作 // 取得当前单元格内容 Console. Allow Delete 也可以控制行的删除。 行删除时的条件判断处理。 用户在删除行的时候,将会引发 Data Grid View. Selected Rows) Data Grid View 禁止列或者行的Resize: 1) 禁止所有的列或者行的Resize // 禁止用户改变Data Grid View1的所有列的列宽 Data Grid View1. False; 关于 No Set 当 Resizable 属性设为 Data Grid View Tri State.

//设定Data Grid View的样式 private void set Dg Style() 3. Column Headers Height Size Mode = Data Grid View Column Headers Height Size Mode. Row Headers Width Size Mode = Data Grid View Row Headers Width Size Mode. Header Text = "标题"; ----------- // 设定包括Header和所有单元格的列宽自动调整 Data Grid View1. Sort Glyph Direction属性以显示排序标志符号。 作为对的Sort(IComparer)方法重载替代方法,可以通过实施提供了Sort Compare事件处理程序自定义排序。此事件发生在用户单击列或配置自动分拣头当调用Sort方法的Sort(Data Grid View Column,List Sort Direction)重载。事件发生时,每行一对在控制,使您能够计算它们的正确顺序。 注:Sort Compare事件不会发生当Data Source属性设置或当Virtual Mode属性值为true。 5.6.3常见问题及案例 1)如何避免用户对列排序? 2)如何针对多个列排序? 5.7边框样式 使用Data Grid View控件,您可以自定义该控件的边框和网格线,以改善用户体验的外观。您可以修改除了为细胞内控制边境网格线的颜色和样式的控件的边框样式。网格线颜色控制,通过Grid Color财产。您还可以申请普通细胞,行标题单元格和列标题单元格不同的单元格边框样式。对于先进的边框样式的Data Grid View提供先进的边框样式的属性。 注:网格线颜色仅用于与Data Grid View Cell Border Style枚举和枚举的Data Grid View Header Border Style单值单,Single Horizo?? By default, text in a Data Grid View Text Box Cell does not wrap. This is similar to setting a Text Box’s Text property to the same text when the Text Box’s Multi Line property is false. 如何在单元格内同时显示图标和文本? Data Grid View控件没有对在同一单元格内同时显示图标和文本提供支持。但通过实现自定义的绘制事件,如Cell Paint 事件,你可以轻松实现这个效果。 下面这段代码扩展了Data Grid View Text Box Column 和Data Grid View Text Box Cell类,将一个图片显示在文本旁边。这个示例使用了Data Grid View Cell Style.

Data Table(); dt Update = this.dbconn(str Sql); dt Update. Auto Size Columns Mode 属性。 3) 设定列头的高度和行头的宽度自动调整 // 设定列头的宽度可以自由调整 Data Grid View1. Compare(Object)方法,对此,作为输入传递时的Data Grid View的Sort(IComparer)方法重载被称为Data Grid View Row对象。有了这个,你可以计算出正确的行排序的基础上在任一列的值。 的Sort(IComparer)方法重载不设置Sorted Column和Sort Order的属性,所以你必须总是设置Data Grid View Column Header Cell. Why does the cell text show up with “square” characters where they should be new lines(TODO,未能实现该效果)? Because text doesn’t wrap, new line characters in the text do not apply and so they are displayed as a “non-printable” character.

Critical) Exit Sub End Try End Select End Sub ǂA L̂悤ɃG[`Fb Ns Ã݂ZҏWԂőIׂ Data Grid View1.