C datagridview rowvalidating


c datagridview rowvalidating-22

C datagridview rowvalidating

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.

Auto Size To All Headers); 关于性能: 通过 Auto Size Columns Mode 或者 Auto Size Rows Mode 属性所指定的单元格进行自动调整时,如果调整次数过于多那么将可能导致性能下降,尤其是在行和列数比较多的情况下。在这时用 Displayed Cells 代替 All Cells 能减少非所见的单元格的调整,从而提高性能。 Data Grid View 冻结列或行 1) 列冻结 Data Grid View Column. Allow User To Order Columns = True 时,固定列不能移动到非固定列, 反之亦然。 2) 行冻结 Data Grid View Row. Edit Programmatically; 根据条件设定单元格的不可编辑状态 当一个一个的通过单元格坐标设定单元格 Read Only 属性的方法太麻烦的时候,你可以通过 Cell Begin Edit 事件来取消单元格的编辑。 Cell Begin Edit 事件处理方法 private void Data Grid View1_Cell Begin Edit(object sender, Data Grid View Cell Cancel Event Args e) Data Grid View 剪切板的操作 Data Grid View. Context Menu Strip2; // 行的 Context Menu Strip 设定 Data Grid View1. Auto Size Columns Mode 属性继承。 注:如果想要自动设置列宽.在这里就必须把Data Grid View的值设置为Fill Grid View. Allow New 属性都为true时,新行才会显示,只要两者有一个为false,新行就不会显示。 4.1.3.2 为生成的新行添加默认值 当用户选择新行作为当前行,Data Grid View会触发Default Values Needed事件。在该事件中可以访问新行,并为其生成默认值,为用户输入提供方便。 下面这段代码演示了如何在Default Values Needed事件中为新行指定默认值。 private void data Grid View1_Default Values Needed(object sender, Data Grid View Row Event Args e) 4.1.3.3 Rows集合与新行的关系 新行包含在Data Grid View控件的Rows集合中,又因其总是处于最后一行,下面这行代码会返回新行: Data Grid View Row row = data Grid View1. Clear()方法也不能将新行从Rows集合中移除。 不能在新行之后添加行。如果你尝试这么做,会抛出Invalid Operation Exception 类型的异常。这种特性的结果是,新行总处于Data Grid View的最后一行。当新行显示的时候,Data Grid View Row Collection 类中用于添加行的方法-Add,Add Copy以及Add Copies-在内部都调用用于插入的方法。 4.1.3.4 在新行中输入数据 用户开始在新行输入数据之前,新行的Is New Row属性值为true;一旦用户开始输入,这一行就不再是新行了,Data Grid View中会产生一个“新”的新行,看下面示意图: 在添加“新”的新行时,会触发User Added Row事件,它的事件处理函数的第二个参数有属性Row,指定了这个“新”的新行。如果用户此时按下Escape键,“新”的新行会被移除,这会触发User Deleting Row事件,它的事件处理函数的第二个参数的属性Row指定了“新”的新行。 4.1.3.5 自定义新行的可视化效果 新行是基于Row Template模板创建的,如果没有指定它的单元格的样式,它们会采用继承的样式。要了解样式继承的更多信息,请参看第五章第一节的内容。 新行中单元格的初始值是由每个单元格的Default New Row Value属性决定的。对于Data Grid View Image Cell类型的单元格,其初始值为一个占位图片,其它类型的则为null。你可以重写这个属性以返回自定义值。但也可以在Default Values Needed事件处理函数中对默认值进行替换,该事件在焦点进入新行时触发。 新行标题的标准图标是箭头或者星号,并没有得到暴露。如果你要自定义这个图标,就需要创建一个自定义的Data Grid View Row Header Cell 类。 新行的标题的标准图标使用标题单元格Data Grid View Cell Style的Fore Color属性。注意:如果没有足够的空间,图标就不会再显示。 如果为标题单元格设置了字符串值(通过Value属性),但没有足够的控件同时显示文本和图标,那么图标会被首先截掉。 4.1.3.6 新行的排序 在非绑定模式下,新行总是添加在Data Grid View的最后一行,即使已经对数据排序。用户需要在添加新行后再次进行排序,以将新记录放在合适的位置;这种行为方式类似于List View控件。 在绑定模式或虚拟模式(Virtual Mode)下,如果已对数据排序,那么插入数据时的行为取决于数据模型的实现方式。对于ADO.

Read Only = true; Data Grid View 行头列头的单元格 // 改变Data Grid View1的第一列列头内容 Data Grid View1. Tool Tip Text = "该单元格的内容不能修改"; // 设定列头的单元格的Tool Tip内容 Data Grid View1. Tool Tip Text = "该列只能输入数字"; // 设定行头的单元格的Tool Tip内容 Data Grid View1. Border Style 属性来设定的。 Border Style 属性设定值是一个 Border Style 枚举: Fixed Single(单线,默认)、Fixed3D、None。 2) 单元格的边框线样式的设定 单元格的边框线的样式是通过 Data Grid View. Bottom = _ Data Grid View Advanced Cell Border Style. Inset Double 同样,设定行头单元格的属性是: Advanced Row Headers Border Style, 设定列头单元格属性是:Advanced Column Headers Border Style。 Data Grid View 单元格表示值的自定义 通过Cell Formatting事件,可以自定义单元格的表示值。(比如:值为Error的时候,单元格被设定为红色) 下面的示例:将“Colmn1”列的值改为大写。 //Cell Formatting 事件处理方法 private void Data Grid View1_Cell Formatting(object sender, Data Grid View Cell Formatting Event Args e) Cell Formatting事件的Data Grid View Cell Formatting Event Args对象的Value属性一开始保存着未被格式化的值。当Value属性被设定表示用的文本之后,把Formatting Applied属性做为True,告知Data Grid View文本已经格式化完毕。如果不这样做的话,Data Grid View会根据已经设定的Format,Null Value,Data Source Null Value,Format Provider属性会将Value属性会被重新格式化一遍。 Data Grid View 用户输入时,单元格输入值的设定 通过 Data Grid View.

Read Only = true;此时,用户的新增行操作和删除行操作也被屏蔽了。 ******如果希望,Data Grid View 内某个单元格不可编辑, 那么只要: // 设置 Data Grid View1 的第2列整列单元格为只读 Data Grid View1. Read Only = true; // 设置 Data Grid View1 的第3行整行单元格为只读 Data Grid View1. Read Only = true; // 设置 Data Grid View1 的[0,0]单元格为只读 Data Grid View1[0, 0]. Value = "第一列"; // 改变Data Grid View1的第一行行头内容 Data Grid View1. Show Cell Tool Tips = True 的情况下, 单元格的 Tool Tip 可以表示出来。对于单元格窄小,无法完全显示的单元格, Tool Tip 可以显示必要的信息。 1) 设定单元格的Tool Tip内容 // 设定单元格的Tool Tip内容 Data Grid View1[0, 0]. Tool Tip Text = "该行单元格内容不能修改"; 2) Cell Tool Tip Text Needed 事件 在批量的单元格的 Tool Tip 设定的时候,一个一个指定那么设定的效率比较低, 这时候可以利用 Cell Tool Tip Text Needed 事件。当单元格的 Tool Tip Text 变化的时候也会引发该事件。但是,当Data Grid View的Data Source被指定且Virual Mode=True的时候,该事件不会被引发。 // Cell Tool Tip Text Needed事件处理方法 private void Data Grid View1_Cell Tool Tip Text Needed(object sender, Data Grid View Cell Tool Tip Text Needed Event Args e) Data Grid View 的单元格的边框、 网格线样式的设定 1) Data Grid View 的边框线样式的设定 Data Grid View 的边框线的样式是通过 Data Grid View. Left = _ Data Grid View Advanced Cell Border Style. Data Source = view; Data Grid View Text Box Column col0 = new Data Grid View Text Box Column(); col0.

Mình muốn sau khi chọn mã hàng, serial rồi nhập Số lượng, chiết khấu thì Thành tiền sẽ được tự tính hoặc khi thay đổi Đơn giá hay Số lượng hay Chiết khấu thì Thành tiền sẽ thay đổi theo - Bạn thử coi lại xem cái column name chính xác chưa.