C rowvalidating principal intimidating teacher

Rated 3.97/5 based on 859 customer reviews

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.

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.

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.

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.

c rowvalidating-6

Data Source Null Value属性要被命名为Parse Null Value的,如果Null Value属性被命名为Formatted Null Value的话,但最后还是采用了Data Source Null Value,这样更直观准确。在将null值写入单元格的值时,就会用到Data Source Null Value属性。在数据绑定情形下,这个null值将被写入数据库或业务对象,此处需要进行控制,因为对于数据库和业务对象来说,null的概念不尽相同。通常你会期望,使用业务对象时将Data Source Null Value 设置为null,而使用数据库时则将其设置为DBNull Value。Data Source Null Value的默认值为DBNull. Row Pre Paint事件,并让自己的单个细胞涂料前景的内容。在Row Pre Paint事件你可以设置Paint Parts事件参数属性来轻松定制的细胞如何油漆。例如,如果您想保留的任何选择,或从绘画的焦点细胞,你Row Pre Paint事件将设置像这样Paint Parts属性: 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。这会导致所有行成为非共享选择。 ?

如果希望,Data Grid View 内所有单元格都不可编辑, 那么只要: // 设置 Data Grid View1 为只读 Data Grid View1. Value = "第一行"; // 改变Data Grid View1的左上头部单元内容 Data Grid View1. Value = "左上"; 另外你也可以通过 Header Text 来改变他们的内容。 // 改变Data Grid View1的第一列列头内容 Data Grid View1. Header Text = "第一列"; Data Grid View 单元格的Tool Tip的设置 Data Grid View.

Current Cell Address 属性(而不是直接访问单元格)来确定单元格所在的行: Data Grid View. * 注意: Grid View 的索引器的参数是: column Index, row Index 或是 column Name, row Index 这与习惯不同。 ********Data Grid View 设定单元格只读: 1) 使用 Read Only 属性 ?

Leave a Reply