Vb net gridview cellvalidating

26-Jun-2017 04:38 by 2 Comments

Vb net gridview cellvalidating - sepak boso jowo online dating

Auto Resize Row(0, Data Grid View Auto Size Row Mode. Auto Resize Rows() c,临时的,让行头和列头自动调整 // 列头高度自动调整 Data Grid View1. Value Member = "Stu Num"; ((Data Grid View Combo Box Cell)dgv Student List. Auto Size Mode = Data Grid View Auto Size Column Mode. Parse Formatted Value(int row Index)方法控制。 默认情况下,会再次使用Type Converter来将Formatted Value解析为单元格的真实值,这时会触发Data Grid View的Cell Parsing事件,这时你就有机会修改单元格的解析方式了。. 充它的宽度控制方法。 大小时自动调整单元格内容的变化,以避免裁减和优化使用空间。设置一个自动调整大小属性的值,表示一个基于内容的大小调整模式。为了避免性能下降时,大量的数据工作,使用一个尺寸模式,只计算显示的行。 调整大小以适应显示的行值,以避免性能下降时,许多行工作。使用自动或编程调整大小适当的调整大小模式枚举值。要调整大小,以适应在新显示的行滚动时,请在一个滚动的事件处理程序大小的方法价值。定制用户双击调整大小,以便显示的行的值只有在确定新的尺寸,要求在一个Row Divider Double Click或Column Divider Double Click事件处理程序大小的方法。 只有在特定时间调整大小以适应单元格内容,以避免性能罚款或启用用户调整大小。调用事件处理程序中的基于内容的大小的方法。例如,使用Data Binding Complete事件绑定后初始化大小和处理Cell Validated或Cell Value Changed事件调整大小,以弥补用户编辑或绑定的数据源的变化。 调整多行单元格内容的行高。确保该列的宽度是用于显示相应的文本段落并使用自动或编程的基于内容的行大小来调整高度。另外,还要确保与细胞显示多内容使用的Wrap Mode细胞式的真实价值。 通常,你会使用自动调整大小模式,以维持列列宽或将其设置为特定宽度前行高进行调整。 5.3.2用鼠标调整大小 默认情况下,用户可以调整行,列和标题不使用自动大小调整模式对细胞价值观为基础。为了防止其他模式,例如列填充模式,缩放用户设置一个或以下的Data Grid View属性: ? 要确定是否所有在Data Grid View单元格已被选中,然后再访问该Selected Cells集合的内容,检查Are All Cells Selected方法的返回值。请注意,但是,这种方法可能会导致行成为非共享。有关详细信息,请参阅下一节。 ? All Cells);上面调用的 Auto Resize Rows 和 Auto Resize Row 当指定的是Data Grid View Auto Size Row Mode. Auto Resize Column Headers Height(); // 行头宽度自动调整 Data Grid View1. Data Source = list; ((Data Grid View Combo Box Cell)dgv Student List. All Cells; 这就搞定了,效果就是列宽会根据内容以及表头宽度自行判断,最后调整到合适的宽度。 Auto Size Mode这个属性并不显示在“属性”窗口中。 如果你的Data Grid View是动态绑定数据的, 那就只能在代码中设置。 如果你的Data Grid View列名是设计好的,那么可以在Data Grid View上点击右键,选择“编辑列”,然后选中你要设置自适应的列,在它的属性列表中的“布局”选项卡里面选择Auto Size Mode的类型。 Auto Size Mode属性可以设置的值还有不少: 成员名称 说明 Not Set 列的大小调整行为从Data Grid View. 如果单元格不能得到正确地解析,会触发Data Error事件。 Data Grid View Text Box Column是一种通用的列类型,用于表示基于文本的值,比如数字和字符串。在编辑模式下,会有一个Text Box控件出现在当前活动单元格,用户可以修改单元格的值。 单元格的值在显示时会自动转换为字符串。用户输入或修改的值在提交时则被自动解析为合适的数据类型以创建一个单元格的值。通过处理Cell Foamatting和Cell Parsing事件,你可以自定义这些转换的方式。比如将数据源的日期字段以特定的形式显示,对某些特殊单元格作出特殊的标记。 一般情况下,Check Box类型的单元格要么用于存储数据,就像其它类型的数据一样,要么用于进行一些重要操作。用户点击Check Box单元格时,如果你希望对此立即做出反应,可以处理Cell Click事件,但该事件发生在单元格的值更新之前。如果点击之时就希望获得新值,一种选择是根据当前值计算点击后的值;另一种方法是立即提交值的变化,然后在Cell Value Changed事件处理函数中对此作出反应,而要在用户点击单元格时立即提交值的变化,你必须处理Current Cell Dirty State Changed事件,在这里,调用Commit End方法提交新值。 3.3 Data Grid View Image Column Data Grid View Image Column 类型的列用于显示图像。这种类型的列有三种方法生成:绑定到数据源时自动生成;为非绑定列手动生成;在Cell Formatting事件处理函数(该事件发生在单元格显示前)中动态生成。 绑定到数据源时自动生成Image列的方法适用于大量的图像格式,包括. 避免使用的Data Grid View Selected Cell Collection Count属性来确定所选细胞的数量。相反,使用Get Cell Count()方法并传入Data Grid View Element States.

Default Values Needed事件里处理。在该事件中处理除了可以设定默认值以外,还可以指定某些特定的单元格的Read Only属性等。 // Default Values Needed 事件处理方法 private void Data Grid View1_Default Values Needed(object sender, Data Grid View Row Event Args e) 三、针对datagridview全局属性的设置 使用 Edit Mode 属性 Data Grid View. Edit Programmatically 时,用户就不能手动编辑单元格的内容了。但是可以通过程序,调用 Data Grid View. Disable 以外的情况时,「Ctrl C」 按下的时候,被选择的单元格的内容会拷贝到系统剪切板内。格式有: Text, Unicode Text,Html, Comma Separated Value。可以直接粘贴到 Excel 内。 Clipboard Copy Mode 还可以设定 Header部分是否拷贝: Enable Always Include Header Text 拷贝Header部分、Enable Without Header Text 则不拷贝。默认是 Enable With Auto Header Text , Header 如果选择了的话,就拷贝。 1) 编程方式实现剪切板的拷贝 Clipboard. Get Clipboard Content()) 2) Data Grid View 的数据粘贴 实现剪切板的拷贝比较容易,但是实现 Data Grid View 的直接粘贴就比较难了。「Ctrl V」按下进行粘贴时,Data Grid View 没有提供方法,只能自己实现。 以下,是粘贴时简单的事例代码,将拷贝数据粘贴到以选择单元格开始的区域内。 //当前单元格是否选择的判断 if (Data Grid View1. Trim End(new char[] ); string[] lines = paste Text. Context Menu Strip2; // 列头的 Context Menu Strip 设定 Data Grid View1. Value),当你遭遇了这些值,就需要考虑如何显示它们。另一方面,很多时候,你还需要向数据源写入null值。使用单元格Style的Null Value属性和Data Source Null Value 属性,你可以改变Data Grid View处理null值的方式。 4.2.1 Null Value属性 Data Grid View Cell Style. Empty (“”) Check Box Column 默认值取决于Three State属性的值,如果为true,默认值为Check State.

Auto Size Rows Mode = Data Grid View Auto Size Rows Mode. Sort Glyph Direction自己的财产。这是必要的,如果你想在自定义排序的灵活性。例如,如果按多列Data Grid View的,你可能要显示多个排序标志符号或无排序标志符号。 虽然您可以通过编程任意列进行排序的Data Grid View,一些栏目,如按钮列,可能不包含可以有意义的有序值。对于这些列,一个Not Sortable Sort Mode属性设置表示,它将永远不会被用于排序的,所以没有必要储备为排序标志符号头空间。 当Data Grid View的排序,你可以同时确定排序列和通过检查Sorted Column和Sort Order的属性的值进行排序。这些值不是一个自定义排序操作??

All Cells; // 设定包括Header和所有单元格的行高自动调整 Data Grid View1. 置Data Grid View的滚动。该图突出这些属性和在这种状态下它们的值。这些属性的读/写除了First Displayed Scrolling Column Hidden Width和Vertical Scrolling Offset属性。 5.6排序 默认情况下,用户可以按一下文字方块的栏标题在Data Grid View控件中的数据。您可以修改特定列Sort Mode属性,允许用户通过其他列类型进行排序时,这样做是有道理的。您还可以通过编程对数据进行排序任何列或多个列。 Data Grid View列有三种排序模式。每个列的排序模式是通过指定的列,它可以设置为以下Data Grid View Column Sort Mode枚举值之一Sort Mode属性。 Data Grid View Column Sort Mode值描述 自动默认为文本框列。除非列标头用于选择,单击列标题此列自动排序,并显示一个指示排序顺序字形的Data Grid View。 Not Sortable默认非文本框列。您可以按该列编程,但是,它不适合排序,所以没有空间为排序标志符号保留。 编程您可以按该列编程和空间是为排序标志符号保留。 您可能要更改的列,默认为Not Sortable如果它包含可以有意义有序值的排序方式。例如,如果你有一个数据库列包含表示项状态的数字,你可以显示一个图像列绑定到数据库列的这些数字对应的图标。然后,您可以改变一个Cell Formatting事件处理程序将图像显示值的数值单元格值。在这种情况下,设置Sort Mode属性,使您的用户自动排序列。自动分拣将使您的用户组项目,具有相同的状态,即使各国所对应的数字没有一个自然顺序。复选框列是另一个例子,自动排序分组,在同一国家的项目有用。 你可以在任何编程方式进行排序列中的值或多个列的Data Grid View,无论Sort Mode设置。编程排序是有用的当您想为排序或当你想实现自己的自定义排序用户界面(UI)。提供自己的排序用户界面是有用的,例如,当您设置了Data Grid View选择模式,使列标题选择。在这种情况下,虽然列标头不能用于排序,你仍然想的标题来显示相应的排序标志符号,所以你会设置Sort Mode属性编程。 列设置为编程排序模式不会自动显示排序标志符号。对于这些列,你必须显示的字形通过设置Data Grid View Column Header Cell.

Value。 4.3 Data Error事件 将Data Error事件独立出来作为一个主题,是因为在操作数据时,经常会遭遇Data Error事件。在操作数据时,Data Error主要发生在一下情况:不能读/写或转换单元格的数据;在尝试进行某种编辑操作时发生了异常。 编辑操作中的Data Error 事件 下面的列表列出了可能会引发Data Error事件的编辑操作: 取消编辑(Canceling an edit) 刷新一个编辑 (通过调用Refresh Edit方法) 尝试将单元格的值写入数据源 初始化编辑控件\单元格的值(通过设置单元格的Formatted Value属性或调用单元格的Initialize Editing Control方法) 结束编辑(Ending an edit) 提交编辑(Committing an edit) 删除一行(Deleting a row) Data Error的上下文: 下面的列表显示了不同的Data Error上下文环境,然后进一步说明了这些上下文环境合适可能发生: 4.4 数据绑定模式(Databound modes) 4.4.1 非绑定模式(Unbound Mode) 如果你要在程序中管理数量相对较小的数据,那么非绑定模式会比较合适。此时你不是像绑定模式中那样将Data Grid View控件直接指向一个数据源,而是手动去生成控件。一般需要用到Data Grid View Row Collection.

Add 方法(该方法向DGV中添加行)。 非绑定模式在处理静态、只读的数据时特别有用,也可以用在以自己的方式与外部数据源交互的情况,但实际上,如果你希望你的用户与外部的数据源交互,一般还是用绑定模式(bound mode)更好。 4.4.2 绑定模式(Bound Mode) 如果你在程序中管理一些数据,并希望能与数据源自动进行交互,就应该使用绑定模式。此时你可以设置Data Source属性,将数据源绑定到Data Grid View控件。如果控件使用了绑定模式,就不需要你去显式地对数据进行读写了。如果Auto Generate Columns 属性为true,数据源中的每一列都会在Data Grid View中生成一个相应的列(根据列的数据类型),如果你希望创建自己的列,可以将该属性设置为false,使用Data Property Name属性将一列绑定到数据源的一列,这在你不想用自动生成的列类型时很有用。 4.4.2.1 有效的数据源 将数据绑定到Data Grid View非常简单、直观,很多情况下,你只需要设置它的Data Source属性。如果使用的数据源包含多个列表(list)或数据表(table),你还需要设置控件的Data Member属性,该属性为字符串类型,用于指定要绑定的列表或数据表。 Data Grid View控件支持标准的Win Form数据绑定模型,因此它可以绑定到下面列表中的类的实例: 任意实现了IList接口的类,包括一维数组; 任意实现了IList Source接口的类,比如Data Table和Data Set; 任意实现了IBinding List 接口的类,比如Binding List ; 任意实现了IBinding List View接口的类,比如Binding Source 。 列表更改通知(List Change Notification) 当你将数据绑定到列表时,最重要的功能之一便是支持列表更改通知了。这只有在你希望列表(即数据源)发生变化,如添加、修改和删除,Data Grid View能够随之更新的时候,该功能才显得重要。只有实现了IBinding List接口的数据源支持更改通知。像数组和集合这样的列表默认情况下不支持更改通知。 在选择数据源时,Binding Source组件应该作为首选,因为它可以绑定到多种类型的数据源,并且能够自动处理很多数据绑定相关的事务。一般情况下,应该将Data Grid View绑定到Binding Source组件,并将Binding Source组件绑定真正的数据源(它的作用就像DGV和数据源间的桥梁)。 Binding List类也可以在一个类的基础上创建自定义列表(list)。 对象更改通知(Object Change Notification) 如果你有了一个数据源,那么数据源中的对象就可以实现对public属性的更改通知。这需要你为相应属性提供一个” Property Name Changed”事件,或者实现INotify Property Changed接口。INotify Property Changed 是在VS 2005 中新加的接口,可以与Binding List一起使用来创建可绑定的列表(list)。但当你的数据源是Binding Source ,那就不用再额外实现更改通知了。 4.4.3 虚拟模式 使用虚拟模式,你可以实现自己的数据管理操作。在绑定模式下,如果要使用非绑定列,那么要想在对列排序时能够维护非绑定列的值,就需要虚拟模式。但虚拟模式的最主要的用途还是在操作大量数据时优化性能。 你将Data Grid View绑定到缓存的数据,然后用代码控制数据行的存取。要保持使用内存量比较小,缓存的数据量应与当前要显示的行数相当。当用户滚动控件看到了新的行时,你的代码就从缓存中请求新的数据,并从内存中清除旧的数据。 如果你正要实现虚拟模式(Virtual Mode),需要考虑数据模型添加新行和回滚添加操作的情况。该功能准确的实现方式取决于数据模型的实现方式及其事务机制,例如,提交的时候是针对单元格还是行。参看本文档后面关于Virtual Mode的主题。 4.4.4 混合模式 – 绑定与非绑定模式 显示在Data Grid View中的数据通常来自于某种类型的数据源,但是你可能也希望显示一个数据源之外的列。这种列称为非绑定列。 你可以在绑定模式下添加非绑定列,在你希望显示一个按钮列或者链接列让用户操作一些特定行时这显得很有用,另外也可以用非绑定列显示一些由绑定列计算而得到的值。你可以在Cell Formatting事件处理函数中生成计算列的值。不过如果你使用的数据源是Data Set或Data Table,你可能希望使用Data Column.

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.

Column Headers Border Style 和 Row Headers Border Style 属性可以修改 Data Grid View 的头部的单元格边框线样式。 属性设定值是 Data Grid View Header Border Style 枚举。(详细参见 MSDN) 3) 单元格的边框颜色的设定 单元格的边框线的颜色可以通过 Data Grid View. Allow User To Add Rows = false; 但是,可以通过程序: Data Grid View Row Collection. Write Line("当前行不是新追加行。") ; Data Grid View 行的用户删除操作的自定义: 1) 无条件的限制行删除操作。 默认时,Data Grid View 是允许用户进行行的删除操作的。如果设置 Data Grid View对象的Allow User To Delete Rows属性为 False 时, 用户的行删除操作就被禁止了。 // 禁止Data Grid View1的行删除操作。 Data Grid View1.

Cell Border Style 属性来设定的。 Cell Border Style 属性设定值是 Data Grid View Cell Border Style 枚举。(详细参见 MSDN) 另外,通过 Data Grid View. Right = _ Data Grid View Advanced Cell Border Style. Cell Parsing 事件可以设定用户输入的值。下面的示例:当输入英文文本内容的时候,立即被改变为大写。 //Cell Parsing 事件处理方法 private void Data Grid View1_Cell Parsing(object sender, Data Grid View Cell Parsing Event Args e) 二、行/列的操作 Data Grid View 不显示最下面的新行: 通常 Data Grid View 的最下面一行是用户新追加的行(行头显示 * )。如果不想让用户新追加行即不想显示该新行,可以将 Data Grid View 对象的 Allow User To Add Rows 属性设置为 False。 // 设置用户不能手动给 Data Grid View1 添加新行 Data Grid View1.

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.

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.