Start Call cellvalidating event

Call cellvalidating event

Auto Resize Row Headers Width( Data Grid View Row Headers Width Size Mode. Context Menu Strip3; // 单元格的 Context Menu Strip 设定 Data Grid View1[0, 0]. Context Menu Strip4; 对于单元格上的右键菜单的设定,优先顺序是: Cell Data Grid View Cell Context Menu Strip Needed、Row Context Menu Strip Needed 事件 利用 Cell Context Menu Strip Needed 事件可以设定单元格的右键菜单,尤其但需要右键菜单根据单元格值的变化而变化的时候。比起使用循环遍历,使用该事件来设定右键菜单的效率更高。但是,在Data Grid View使用了Data Source绑定而且是Virtual Mode的时候,该事件将不被引发。 // Cell Context Menu Strip Needed事件处理方法 private void Data Grid View1_Cell Context Menu Strip Needed(object sender, Data Grid View Cell Context Menu Strip Needed Event Args e) 同样,可以通过 Row Context Menu Strip Needed 事件来设定行的右键菜单。 // Row Context Menu Strip Needed事件处理方法 private void Data Grid View1_Row Context Menu Strip Needed(object sender, Data Grid View Row Context Menu Strip Needed Event Args e) Cell Context Menu Strip Needed 事件处理方法的参数中、「e. Row Index=-1」表示列头。Row Context Menu Strip Needed则不存在「e. Row Index=-1」的情况。 四、针对触发事件的一些介绍 我认为只要记住常用的即可,比如鼠标的操作,一些常见的点击触发事件;比如_Cell Parsing()一般在编辑状态结束的时候发生。 其他的用到的时候算查即可,时间长了掌握的也就多了。 ----------- ((Data Grid View Combo Box Cell)dgv Student List. Auto Size Columns Mode 属性继承。 None 列宽不会自动调整。 All Cells 调整列宽,以适合该列中的所有单元格的内容,包括标题单元格。 All Cells Except Header 调整列宽,以适合该列中的所有单元格的内容,不包括标题单元格。 Displayed Cells 调整列宽,以适合当前屏幕上显示的行的列中的所有单元格的内容,包括标题单元格。 Displayed Cells Except Header 调整列宽,以适合当前屏幕上显示的行的列中的所有单元格的内容,不包括标题单元格。 Column Header 调整列宽,以适合列标题单元格的内容。 Fill 调整列宽,使所有列的宽度正好填充控件的显示区域,只需要水平滚动保证列宽在Data Grid View Column. Fill Weight属性值决定。 另外介绍: Data Grid View 有一个属性是Auto Size Column Mode,他有几个枚举值: 1、All Cells 调整列宽,以适合该列中的所有单元格的内容,包括标题单元格。 2、All Cells Except Header 调整列宽,以适合该列中的所有单元格的内容,不包括标题单元格。 3、Column Header 调整列宽,以适合列标题单元格的内容。 4、Displayed Cells 调整列宽,以适合当前屏幕上显示的行的列中的所有单元格的内容,包括标题单元格。 5、Displayed Cells Except Header 调整列宽,以适合当前屏幕上显示的行的列中的所有单元格的内容,不包括标题单元格。 6、Fill 调整列宽,使所有列的宽度正好填充控件的显示区域,只需要水平滚动保证列宽在Data Grid View Column. Fill Weight 属性值决定。 7、None 列宽不会 自动调整。 8、Not Set 列的大小调整行为从 Data Grid View. NET中Image类支持的各种格式,还有Access数据库及Northwind范例数据库使用的OLE图片格式。 如果你想提供Data Grid View Button Column列的功能,又希望显示自定义的外观,手动生成Image列会很有用。在显示后,你可以处理Cell Click事件以处理用户对单元格的点击(模拟按钮列)。 如果你要为计算值或非图片的值提供图片显示,在Cell Formatting事件处理函数中动态生成Image列的方法会很有用。比如,你有一个表示风险值的列,它的值可能是”high”、”middle”或”low”,可以为它们显示不同的图标作为警示;或者你有一个名为”Image”的列,它的值时图片文件的位置而不是真实的图片内容,也可以用这种方法。 3.4 Data Grid View Button Column 使用Data Grid View Button Column 列,可以在单元格内显示按钮。如果你要为用户操作特定行提供一种简单的方式,Button列会很有用,比如排序或在另一个窗体中显示子表记录。 在对Data Grid View进行数据绑定时不会自动生成Button列,所以你必须手动创建它们,然后把它们添加到Data Grid View控件的Columns集合中。 你可以处理Cell Click事件以响应用户的点击动作。 3.5 Data Grid View Combo Box Column 在Data Grid View Combo Box Column类型的列中,你可以显示包含下拉列表的单元格。这在仅允许用户输入一些特定值的时候显得很有用,比如在SQL Server示例数据库Northwind中Products表的Category列,它表示产品的种类,这个应只允许选择现有的产品种类,此时就可以使用Combo Box列。 如果你了解如何为Combo Box控件生成下拉列表,就可以用相同的方式为Combo Box列中的所有单元格生成下拉列表。要么通过列的Items集合手动添加,要么通过Data Source,Display Member 和Value Member属性绑定到一个数据源。要了解其中的更多信息,可以参考Win Forms中Combo Box空间的用法。 你可以将Combo Box列的单元格的实际值绑定到Data Grid View控件本身的数据源(注意不是Combo Box列的数据源),这需要设置该列的Data Property Name属性(设置某个列的名称)。 Combo Box列不会在数据绑定时自动生成,所以你必须手动创建它们,然后将其添加到Columns集合属性中。另外,你也可以使用设计器,在设计时设置相应的属性,这个过程类似于在设计器中Combo Box控件的使用。 3.5.1 Data Error事件和Combo Box列 在使用Data Grid View Combo Box Column 时,有时会修改单元格的值或启动Combo Box控件的Items集合,这样可能会引发Data Error事件。这是Combo Box列的设计使然,Combo Box列的单元格会进行数据验证。在Combo Box列的单元格尝试绘制包含的内容时,它需要将包含的值进行格式化(见第二章第三节),在此转换过程中,它会在Combo Box的Items集合中查找对应的值,如果查找失败,就会引发Data Error事件。忽略了Data Error事件可能会使单元格不能进行正确的格式化。 3.6 Data Grid View Link Column 使用Data Grid View Link Column列,你可以显示一列包含超链接的单元格。在显示数据源中的URL值,或者替代按钮列进行一些特殊行为,如打开另一个子记录窗体时会很有用。 Link列也不会在Data Grid View数据绑定时自动生成。要使用它,你还得手动创建,然后将它添加到Data Grid View控件的Columns集合中。 你可以处理Cell Content Click事件来相应用户的点击动作。这个事件不同于Cell Click 和Cell Mouse Click 事件,后两者在用户点击单元格任何位置(而不仅仅时链接)时都会触发。 Data Grid View Link Column 类提供了几个属性,用来修改链接的外观,包括点击前,点击时和点击后(类似于网页中的超链接)。 4 操作数据(Working with Data) 多数情况下,使用Data Grid View的时候都需要跟数据打交道,这时有很多事情可能需要你去做。你需要验证用户输入的数据,或者需要对数据进行格式化。Data Grid View能够以三种模式显示数据:bound、unboundand 和virtual。每种模式都有自己的特性和存在的理由。不管是否是数据绑定模式,在操作数据时,如果发生错误,Data Grid View通常会触发Data Error事件,理解该事件发生的原因能让你更好地利用它。 4.1 数据输入和验证的相关事件 用户输入数据时-对其所在的行或单元格,你可能希望验证这些数据,在遇到无效数据时通知用户。就像常见的Windows Forms控件,Data Grid View的行和单元格也有Validating和Validated事件,验证事件可被取消。用户在单元格/行间移动时会触发Enter和Leave事件。最后,用户在开始编辑单元格时也会触发事件。了解所有这些程序的发生顺序会对你很有帮助。 4.1.1 数据验证相关事件的顺序 下面列出validation,enter/leave和begin/end这些事件的顺序(当Edit Mode为Edit On Enter时): 当从一个单元格移动至另一单元格(在同一行内): 1) Cell Leave (原来的单元格) 2) Cell Validating/ed (原来的单元格) 3) Cell End Edit (原来的单元格) 4) Cell Enter (新的单元格) 5) Cell Begin Edit (新的单元格) 当从一行移动到另一行: 1) Cell Leave (原来的单元格),Row leave (原来的行) 2) Cell Validating/ed (原来的单元格) 3) Cell End Edit (原来的单元格) 4) Row Validating/ed (原来的行) 5) Row Enter (新的行) 6) Cell Enter (新的单元格) 7) Cell Begin Edit (新的单元格) 4.1.2 验证数据 验证用户输入时,如果Data Grid View采用非数据绑定模式,通常会对单元格进行验证;而如果采用数据绑定模式,则一般会对行进行验证。这与数据的组织方式密切相关,非数据绑定模式下,一行的单元格间关系一般比较“散”,而绑定模式下,数据源的数据一般以行来组织。但有时在数据绑定模式下会同时进行单元格级和行级的验证。 4.1.2.1 显示错误信息 一旦遭遇了无效的输入数据,你通常需要通知用户。这时有多种方式可以选择,传统的方式是使用信息对话框。Data Grid View还能够为行或单元格显示一个错误图标来通知用户输入了无效数据。错误图标带有一个工具提示,它提供了该错误的相关信息: 4.1.3 在新行中的数据输入(Data Entry in the New Row) 当在程序中使用Data Grid View来编辑数据时,你往往希望提供让用户添加新行数据的功能。Data Grid View控件支持这个功能,提供了一个用于添加新记录的行,而这一行总是显示为最后一行,并在该行的标题单元格标以星号(*)。 下面的几个小节会讨论一些在程序中使用这个新行时需要考虑的内容。(下面总是以 新行 表示 用于添加新记录的行 ) 4.1.3.1 显示新行 使用Allow User To Add Rows属性以指示是否显示新行,其默认值为true。 新行处于网格的最后一行,标题带有星号: 在数据绑定的情况下,当Data Grid View控件的Allow User To Add Rows属性和数据源的IBinding List. Count - 1]; 尽管新行也包含在Rows集合中,它与Rows集合中其它行的行为却不相同,表现在两点: 不能以编程的方式将新行从Rows集合中移除,如果你尝试这么做,会抛出Invalid Operation Exception类型的异常。用户也不能删除新行。Data Grid View Row Collection.

All Cells; Auto Size Columns Mode 属性的设定值枚举请参照 msdn 的 Data Grid View Auto Size Rows Mode 说明。 2)指定列或行自动调整 // 第一列自动调整 Data Grid View1. Auto Size Mode =Data Grid View Auto Size Column Mode. 后,有意义的。有关自定义排序信息,请参见本主题中的自定义排序节后面。 当Data Grid View控件同时包含绑定和未绑定列进行排序,在未绑定列的值不能自动维护。为了保持这些值,你必须执行Virtual Mode属性设置为true,并处理Cell Value Needed和Cell Value Pushed事件虚拟模式。 5.6.1编程排序 您可以排序的Data Grid View编程方式调用它的排序方法。 本的Sort(Data Grid View Column,List Sort Direction)Sort方法重载采用Data Grid View Column和一个枚举值作为参数List Sort Direction。此重载时非常有用,可以通过与有意义的命令,但你不想配置值的列自动分拣排序。当调用此重载并同一个Data Grid View Column Sort Mode.

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.

Expression 属性来创建一个计算列,在这种情况下,在DGV看来,这一列就跟数据源中其它列是一样的。 在绑定模式下根据非绑定列排序是不受支持的。如果你在绑定模式下创建了非绑定列,你必须实现虚拟模式,这样在根据绑定列排序时可以维护非绑定列的值。 如果添加的非绑定列不能由数据源数据计算得来或者这些数据会频繁更新,你就应该使用虚拟模式。要了解虚拟模式的更多信息,请参看本文档后面的虚拟模式相关章节。 5 特性综览(Overview of features) 5.1 样式(Styling) Data Grid View使得定义单元格的基本外观和格式化单元格显示变得简单。 您可以定义的外观和在特定的列和行,或在通过各种设置Data Grid View控件属性访问的Data Grid View Cell Style对象的属性控制所有细胞的单个单元格的格式样式。此外,您可以修改,如通过处理Cell Formatting事件的单元格值因素的基础上动态这些样式。 Data Grid View控件中的每一个细胞都可以拥有如文本格式,背景色,前景色和字体自己的风格。但是,通常多个单元格将分享独特的风格特点。 细胞群体共享样式可能包括在特定行或列的所有单元格包含特定值,或控件中的所有细胞的所有细胞。由于这些群体重叠,每个单元可能会从多个位置的样式??

信息。例如,您可能会希望每个在Data Grid View控件使用相同的字体细胞,只有细胞货币列,但使用货币格式,负数和货币细胞只使用红色前景色。 单击单元格以选中它,行列标题不能用于选择。 Column Header Select 单击单元格以选中它,单击列标题选中整列。此时列标题不能用于排序。 Full Column Select 单击单元格或列标题会选中它们所在的列,此时列标题不能用于排序。 Full Row Select 单击单元格或行标题会选中它们所在的行。 Row Header Select DGV的默认选择模式,单击单元格选中该单元格,单击行标题则选中整行。 注意: 在运行时改变选择模式会自动清除当前选择的内容。 5.4.1 Programmatic Selection 注意:改变Current Cell属性的值不会改变当前选择的内容。 通过Selected Cells、Selected Rows和Selected Columns属性你可以访问当前选中的单元格、行和列。不过当所有单元格都被选中的时候,使用这些属性效率会比较低,为此可首先使用Are All Cells Selected方法查看是否已选中全部单元格。此外,访问这些属性来查看选中单元格、行和列的数目效率也比较低,此时应该使用Get Cell Count、Get Row Count和Get Column Count方法,传给它们的参数为Data Grid View Element States.

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.

//设定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.