DataGrid控件  

示例教程“Visual Basic中DataCombo 和 DataList 控件的使用”多表关联
                            
    
  显示并允许对Recordset对象中代表记录和字段的一系列行和列进行数据操纵。  
   
  语法  
   
  DataGrid  
   
  说明  
   
  该数据识别的DataGrid控件看起来与Grid控件类似。但是,您可以设置DataGrid控件的DataSource属性为一个Data控件,以自动填充该控件并且从Data控件的Recordset对象自动设置其列标头。这个DataGrid控件实际上是一个固定的列集合,每一列的行数都是不确定的。  
   
  DataGrid   控件的每一个单元格都可以包含文本值,但不能链接或内嵌对象。可以在代码中指定当前单元格,或者用户可以使用鼠标或箭头键在运行时改变它。通过在单元格中键入或编程的方式,单元格可以交互地编辑。单元格能够被单独地选定或按照行来选定。  
   
  如果一个单元格的文本太长,以致于不能在单元格中全部显示,则文本将在同一单元格内折行到下一行。要显示折行的文本,必须增加单元格的Column对象的Width属性和/或DataGrid控件的RowHeight属性。在设计时,可以通过调节列来交互地改变列宽度,或在Column对象的属性页中改变列宽度。  
   
  使用DataGrid控件的Columns集合的Count属性和Recordset对象的RecordCount属性,可以决定控件中行和列的数目。DataGrid控件的可包含的行数取决于系统的资源,而列数最多可达32,767列。  
   
  选择一个单元格,则ColIndex属性被设置,也就是选择了DataGrid对象的Columns集合中的一个Column对象。Column对象的Text和Value属性引用当前单元格的内容。使用Bookmark属性能够访问当前行的数据,它能够提供对下一级Recordset对象中记录的访问。DataGrid控件中的每一列都有自己的字体、边框、自动换行、和另外一些与其他列无关的能够被设置的属性。在设计时,您可以设置列宽和行高,并且建立对用户不可见的列。您还能阻止用户在运行时改变格式。  
   
  注意       如果您在设计时设置了任何一个DataGrid列属性,就必须设置它的所有属性以保持当前的设置值。  
   
  注意       如果使用Move方法定位DataGrid控件,就必须使用Refresh方法强迫控件重画。  
   
  除了不能支持解除绑定模式以外,DataGrid控件的功能与DBGrid控件类似。  
   
  注意       该控件支持Unicode。当使用一个例如Microsoft   Windows   NT这样的支持Unicode的系统时,控件传递Unicode数据而无需转换。但是,在其他系统中,数据则被从ANSI转换到Unicode并转换回来。详细信息请参阅   Programmer's   Guide   中的   "ANSI,   DBCS,   and   Unicode:   Definitions"。  
  Recordset   对象   (ADO)  
                                 
   
  Recordset   对象表示的是来自基本表或命令执行结果的记录全集。任何时候,Recordset   对象所指的当前记录均为集合内的单个记录。  
   
   
   
   
   
  说明  
   
  可使用   Recordset   对象操作来自提供者的数据。使用   ADO   时,通过   Recordset   对象可对几乎所有数据进行操作。所有   Recordset   对象均使用记录(行)和字段(列)进行构造。由于提供者所支持的功能不同,某些   Recordset   方法或属性有可能无效。  
   
  ADOR.Recordset   和   ADODB.Recordset   是用来创建   Recordset   对象的   ProgID。由此产生的   Recordset   对象行为相同,与   ProgID   无关。ADOR.Recordset   随   Microsoft®   Internet   Explorer   安装,而   ADODB.Recordset   则随   ADO   安装。Recordset   对象的行为受环境(即客户端、服务器、Internet   Explorer   等)的影响。这些差异将在属性、方法和事件的“帮助”主题中加以说明。  
   
  在   ADO   中定义了四种不同的游标类型:    
   
  动态游标   —   用于查看其他用户所作的添加、更改和删除,并用于不依赖书签的   Recordset   中各种类型的移动。如果提供者支持,可使用书签。  
   
   
  键集游标   —   其行为类似动态游标,不同的只是禁止查看其他用户添加的记录,并禁止访问其他用户删除的记录,其他用户所作的数据更改将依然可见。它始终支持书签,因此允许   Recordset   中各种类型的移动。  
   
   
  静态游标   —   提供记录集合的静态副本以查找数据或生成报告。它始终支持书签,因此允许   Recordset   中各种类型的移动。其他用户所作的添加、更改或删除将不可见。这是打开客户端   (ADOR)   Recordset   对象时唯一允许使用的游标类型。  
   
   
  仅向前游标   —   除仅允许在记录中向前滚动之外,其行为类似动态游标。这样,当需要在   Recordset   中单程移动时就可提高性能。    
  在打开   Recordset   之前设置   CursorType   属性来选择游标类型,或使用   Open   方法传递   CursorType   参数。部分提供者不支持所有游标类型。请检查提供者的文档。如果没有指定游标类型,ADO   将默认打开仅向前游标。  
   
  对部分提供者(例如   Microsoft   ODBC   Provider   for   OLE   DB   连同   Microsoft   SQL   Server),可以通过使用   Open   方法传递连接字符串,根据以前定义的   Connection   对象独立地创建   Recordset   对象。ADO   仍然创建   Connection   对象,但它不将该对象赋给对象变量。不过,如果正在相同的连接上打开多个   Recordset   对象,就应该显式创建和打开   Connection   对象,由此将   Connection   对象赋给对象变量。如果在打开   Recordset   对象时没有使用该对象变量,即使在传递相同连接字符串的情况下,ADO   也将为每个新的   Recordset   创建新的   Connection   对象。  
   
  可以创建所需数量的   Recordset   对象。  
   
  打开   Recordset   时,当前记录位于第一个记录(如果有),并且   BOF   和   EOF   属性被设置为   False。如果没有记录,BOF   和   EOF   属性设置是   True。  
   
  假设提供者支持相关的功能,可以使用   MoveFirst、MoveLast、MoveNext   和   MovePrevious   方法以及   Move   方法,和   AbsolutePosition、AbsolutePage   和   Filter   属性来重新确定当前记录的位置。仅向前   Recordset   对象只支持   MoveNext   方法。当使用   Move   方法访问每个记录(或枚举   Recordset)时,可使用   BOF   和   EOF   属性查看是否移动已经超过了   Recordset   的开始或结尾。  
   
  Recordset   对象可支持两类更新:立即更新和批更新。使用立即更新,一旦调用   Update   方法,对数据的所有更改将被立即写入现行数据源。也可以将值的数组作为参数传递来使用   AddNew   和   Update   方法,同时更新记录的若干字段。  
   
  如果提供者支持批更新,可以使提供者将多个记录的更改存入缓存,然后使用   UpdateBatch   方法在单个调用中将它们传送给数据库。这种情况应用于使用   AddNew、Update   和   Delete   方法所做的更改。调用   UpdateBatch   方法后,可以使用   Status   属性检查任何数据冲突并加以解决。  
   
  注意       要执行不使用   Command   对象的查询,应将查询字符串传递给   Recordset   对象的   Open   方法。但是,在想要保持命令文本并重复执行或使用查询参数时,仍然需要   Command   对象。  
   
  AddNew   方法   (ADO)  
                     
   
  为可更新的   Recordset   对象创建新记录。  
   
  语法  
   
  recordset.AddNew   FieldList,   Values  
   
  参数  
   
  FieldList       可选。新记录中字段的单个、一组字段名称或序列位置。  
   
  Values       可选。新记录中字段的单个或一组值。如果   Fields   是数组,那么   Values   也必须是有相同成员数的数组,否则将发生错误。字段名称的次序必须与每个数组中的字段值的次序相匹配。  
   
  说明  
   
  使用   AddNew   方法可创建和初始化新记录。通过   adAddNew   使用   Supports   方法可验证是否能够将记录添加到当前的   Recordset   对象。  
   
  在调用   AddNew   方法后,新记录将成为当前记录并在调用   Update   方法后继续保持为当前记录。如果   Recordset   对象不支持书签,当移动到其他记录时将无法对新记录进行访问。是否需要调用   Requery   方法访问新记录则取决于所使用的游标类型。  
   
  如果在编辑当前记录或添加新记录时调用   AddNew,ADO   将调用   Update   方法保存任何更改并创建新记录。  
   
  AddNew   方法的行为取决于   Recordset   对象的更新模式以及是否传送   Fields   和   Values   参数。  
   
  在立即更新模式(调用   Update   方法时提供者会将更改写入现行数据源)下,调用不带参数的   AddNew   方法可将   EditMode   属性设置为   adEditAdd。提供者将任何字段值的更改缓存在本地。调用   Update   方法可将新记录传递到数据库并将   EditMode   属性重置为   adEditNone。如果传送了   Fields   和   Values   参数,ADO   则立即将新记录传递到数据库(无须调用   Update),且   EditMode   属性值没有改变   (adEditNone)。  
   
  在批更新模式(提供者缓存多个更改并只在调用   UpdateBatch   时将其写入现行数据源)下,调用不带参数的   AddNew   方法可将   EditMode   属性设置为   adEditAdd。提供者将任何字段值的更改缓存在本地。调用   Update   方法可将新的记录添加到当前记录集并将   EditMode   属性重置为   adEditNone,但在调用   UpdateBatch   方法之前提供者不将更改传递到现行数据库。如果传送   Fields   和   Values   参数,ADO   将把新记录发送给提供者以便缓存;需要调用   UpdateBatch   方法将新记录传递到现行数据库。  
  Delete   方法   (ADO   Recordset)  
                     
   
  删除当前记录或记录组。  
   
  语法  
   
  recordset.Delete   AffectRecords  
   
  参数  
   
  AffectRecords       AffectEnum   值,确定   Delete   方法所影响的记录数目,该值可以是下列常量之一。  
   
  常量   说明    
  adAffectCurrent   默认。仅删除当前记录。    
  adAffectGroup   删除满足当前   Filter   属性设置的记录。使用该选项须将   Filter   属性设置为有效的预定义常量之一。    
   
   
  说明  
   
  使用   Delete   方法可标记   Recordset   对象中的当前记录或一组记录以便删除。如果   Recordset   对象不允许删除记录将引发错误。使用立即更新模式将在数据库中进行立即删除,否则记录将标记为从缓存删除,实际的删除将在调用   UpdateBatch   方法时进行。(使用   Filter   属性可查看已删除的记录)。  
   
  从已删除的记录中检索字段值将引发错误。删除当前记录后,在移动到其他记录之前已删除的记录将保持为当前状态。一旦离开已删除记录,则无法再次访问它。  
   
  如果在事务中嵌套删除,可用   RollbackTrans   方法恢复已删除的记录。如果处于批更新模式,则可用   CancelBatch   方法取消一个或一组挂起的删除。  
   
  如果因与现行数据冲突而导致删除记录失败(如记录已被其他用户删除),则提供者向   Errors   集合返回警告但不终断程序执行,只有在所有提出请求的记录上发生冲突时才会产生运行时错误。  
  Delete   方法   (ADO   Fields   集合)    
                     
   
  从   Fields   集合中删除对象。  
   
  语法  
   
  Fields.Delete   Field  
   
  参数  
   
  Field       变体型,指定将要删除的   Field   对象。该参数必须是   Field   对象名而不能是序号位置或   Field   对象本身。  
   
  说明  
   
  对打开的   Recordset   调用   Fields.Delete   方法将引起运行时错误。  
  Delete   方法(ADO   Parameters   集合)  
                     
   
  从   Parameters   集合中删除对象。  
   
  语法  
   
  Parameters.Delete   Index  
   
  参数  
   
  Index         字符串,代表要删除的对象名称,或者对象在集合中的顺序位置(索引)。  
   
  说明  
   
  使用集合上的   Delete   方法可删除集合中的某个对象。该方法只对   Command   对象的   Parameters   集合有效。在调用   Delete   方法时必须使用   Parameter   对象的   Name   属性或它的集合索引   —   对象变量是无效参数。