为数据访问页中的数据源控件编写脚本

Mark Roberts
Microsoft Corporation

2001 年 4 月

摘要:要编写用于数据访问页的脚本,您必须了解数据访问页与动态 HTML 页的底层对象模型、Microsoft Office 数据源 (Microsoft Office Data Source) 控件以及各 Microsoft 数据访问组件 (Microsoft Data Access Components) 的交互方式。

本文重点讨论数据源 (Data Source) 控件对象模型中的下列对象:SectionGroupLevelDataPage 以及 ElementExtension。这些对象决定了数据访问页的布局、结构和数据绑定。本文探讨这些对象如何与 DHTML 对象集成,以便其能够与页自身协作,以及将 ADO 对象用于与绑定到页的数据协作。

另外,本文还概要介绍以下事项:

  • 如何针对数据访问页中的“Microsoft Office 数据源”控件编写脚本
  • 数据访问页的体系结构,其中集成了来自动态 HTML 页、数据源控件以及 Microsoft 数据访问组件的功能
  • 使用数据源控件事件

您还会看到一个摘要,其中各种新的方法和属性,这些方法和属性业已被添加到用于 Access 2002 的数据源控件对象模型。

目录

简介
什么是数据源控件?
使数据访问页后面的对象模型有意义
数据源控件对象
Section 对象
GroupLevel 对象
DataPage 对象
ElementExtension 对象
数据源控件事件
Access 2002 数据访问页有何新功能?
其他信息

简介

数据访问页设计用于在运行于 Microsoft Internet Explorer 5.0 或更高版本的 Web 页上重现 Microsoft® Access 窗体和报表。除了简单地重现窗体和报表,数据访问页还提供更多的特性和益处,特别用于从 Web 浏览器进行数据浏览、数据录入、汇报以及分析。创建数据访问页时需要有 Access 2000 或更高版本,但数据访问页的用户只需有 Internet Explorer 5.0 或更高版本,安装有 Microsoft Office Web 组件,而在使用实时数据的情况下,还需要有使用页所连接的数据源的足够的安全许可。

数据访问页是建立在多种技术和组件基础上的,其中最为重要的就是“Microsoft Office 数据源”控件 (MSODSC),而该套组件中用于显示、编辑和分析数据的部分就被称作 Microsoft Office Web 组件。“数据源”控件集成了来自动态 HTML (DHTML) 对象模型以及 ActiveX 数据对象 (ADO) 的功能;前者由 Microsoft 的 HTML 分析和重现引擎 (MSHTML) 加以实施,而后者是到 Microsoft 数据访问组件 (MDAC) 的程序接口。

图 1:数据访问页组件

本文重点讨论“数据源”控件的对象模型的各种核心特性与 DHTML 和 ADO 对象模型的关系,以及如何使用这些知识,通过编写脚本来扩展和自定义数据访问页。本文中所陈述的大多数信息均可以用于在 Access 2000 和 Access 2002 中创建的数据访问页。其中还描述了在 Access 2002 数据访问页中所提供的某些新的特性。

Access 2002 中的数据访问页“设计视图”具有多项改善,诸如多级别撤销、多选页元素、改良的属性浏览、用于分组的拖放区以及“版式向导”(在您从“字段列表”拖动多个字段或整个表时显示出来),从而使得对多个字段进行布局变得容易。为获得最佳设计体验,您应当在装有 Internet Explorer 5.5 或更高版本的情况下,在 Access 2002 中创建数据访问页(“设计视图”中的某些功能改善依赖于 Internet Explorer 5.5 或更高版本所安装的若干组件)。

注意:在 Access 2002 中创建的数据访问页无法在 Access 2000 中的“设计视图”中打开。同样,一旦在 Access 2002 的“设计视图”中打开在 Access 2000 中创建的数据访问页并保存更改,则无法在 Access 2000 中将其重新打开。但是,如果用户还安装有 Microsoft Office XP Web 组件,则在 Access 2002 中创建的页可以在 Access 2000 的“设计视图”中打开。

本文并不论及为 Microsoft Office Chart、Spreadsheet 和 PivotTable® 组件使用“数据源”控件。有关这些组件的更多信息,请参阅《Microsoft Office 2000/Visual Basic 程序员指南》(英文)中的使用 Office Web 组件(英文)以及各种 Microsoft Office 2000 Web 组件编程(英文)书籍(由微软出版社出版)。

什么是数据源控件?

“数据源”控件的主要功能就是连接到数据源、建立和执行针对这些数据源的命令以及将这些命令的结果检索和绑定到页上的元素。另外,“数据源”控件还对用户当前正在操作的记录进行跟踪。对于更加复杂的带“条纹”的页,“数据源”还创建分层分组。例如,您可以显示一个订单窗体,其中带有一个对来自一个相关表的订单细节进行显示的子窗体,或者一个以多层方式对数据进行分组的销售报表,诸如依照月份、地区和销售代表进行的嵌套分组。(有关带条纹页的更多细节,请参阅本文稍后的数据访问页的布局)。

与 Office Web 组件控件不同的是,“数据源”控件是一个 ActiveX® 控件,在运行时没有任何可见的界面。当您在 Access 创建一个新的数据访问页时,就在数据访问页中的 HEAD 元素中插入一个 <OBJECT> 标记,用于对“数据源”控件进行定义。在 Access 中为数据访问页创建的 <OBJECT> 标记的 ID 属性,总是设为 MSODSC

如果您在 Access 2002 的 Microsoft 脚本编辑器中打开一个数据访问页(通过在“设计视图”中打开数据访问页,然后单击工具栏上的“Microsoft 脚本编辑器”),您就可以在页的上部看到针对“数据源”控件的标记。在该控件的 CLASSID 属性的后面,是对控件的各种属性的一个广泛的 XML 定义,诸如 ConnectionString 属性和 ElementExtensions 集合。ElementExtensions 集合用于将自定义属性添加到数据访问页中的数据绑定 HTML 元素,且仅在字段被绑定到某个页后才存在。在本文稍后部分中有对 ElementExtensions 集合的更详尽的描述。

重要事项:不要直接在数据访问页的 HTML 中修改用于“数据源”控件的 <OBJECT> 标记。您应当从该页在 Access 中的“设计视图”对这些设置进行修改,或通过“数据源”控件对象模型的各种方法和属性进行修改。

使数据访问页后面的对象模型有意义

与 Office Web 组件 ChartSpreadsheetPivotTable 控件不同,数据访问页的功能并非包含在单独一个 ActiveX 控件中(尽管数据访问页与所有的 Web 页一样,可以将 ChartSpreadsheetPivotTable 控件合并在一起)。

在最基本的级别上,数据访问页包含“数据源”控件与一组 DIV 元素的交互,而后者用作构成页的标签、控件和数据绑定元素的容器。对数据访问页的功能进行扩展,可能需要您使用 DHTML 文档对象模型,以及“数据源”控件对象模型。其中有两个主要原因:

因为“数据源”控件设计用于与 HTML 元素集成,其对象模型包含一些成员(诸如 Section 对象的 HTMLContainer 属性),这些成员用于编写脚本,以访问 DHTML 文档对象模型的各种集合、属性和方法。这使您能够使用构成数据访问页的各种 HTML 元素。

除了与 DHTML 文档对象模型的各个部分交互以及将其集成,“数据源”控件还封装 ADO 功能,用于对通过页显现的记录集进行操作。因为记录集可能是分层结构的,可能包含在运行时生成的包含计算结果的列(又称作“整形记录集”),封装的 ADO 功能与 OLE DB MSDataShape Provider 协作,而 OLE DB Cursor Engine 与数据源自身的实际数据提供者协作。

“数据源”控件设计用于替您对这些数据访问组件的大多数使用细节进行管理,而“数据源”控件对象模型还包含使您能够对 ADO 对象进行访问的成员;例如,DataSourceControl 对象的 Connection 属性用于访问页数据源的 ADO Connection 对象,而 DataPage 对象的 Recordset 属性使您可以访问某个页中所显示的一组特定记录的 ADO Recordset 对象。

数据源控件对象

“数据源”控件显现各种各样的集合和对象,但您在使用数据访问页时需要了解的主要对象集合有:

  • Section 对象
  • GroupLevel 对象
  • DataPage 对象
  • ElementExtension 对象

可以从相应的 DataSourceControl 对象集合访问 GroupLevelDataPageElementExtension 对象,但没有与 Section 对象对应的集合。这是因为 Internet Explorer 在运行时重现实际的节。用于替代与 Section 对象相对应的集合,“数据源”控件对象模型提供一组属性和对象,用于访问页上的某一特定节(见本文稍后所述)。

下面各节描述这些对象如何映射到数据访问页的组件,以及与典型数据访问页自定义任务的关系。

数据访问页的布局

数据访问页的基本部分在“设计视图”中的名称可能有点令人迷惑,因此了解它们的含义以及这些部分是如何映射到“数据源”控件对象模型的相关集合和对象的,这一点十分重要。

随着数据访问页是否使用分层分组,其底层结构会有所变化。数据访问页有两个基本类型:

  • 简单页 – 这些页一次显示单独一个记录的字段,没有任何的重复记录或分层分组。尽管简单页在运行时没有任何分组,但就底层数据模型而言,其确实具有单独一个组级别 (GroupLevels.Count = 1) 以及一组与该组级别相关联的属性。举例而言,“罗斯文商贸”示例数据库的“雇员”页就是一个简单页。
  • 带条纹页 – 这些页以条纹格式每次显示多个记录,这些条纹在页上从上至下重复。带条纹页或者没有任何的分层分组(实质上是一个简单页,其单一组级别的 DataPageSize 属性设为大于 1),或者也可以显示一个相关或分组记录的分层结构。在默认情况下,带分组的带条纹页仅显示分层结构的第一层,而靠下的分组级别被折叠在展开控件(+ 图标)的下方。举例而言,“罗斯文商贸”示例数据库的“审阅订单”页就是一个带分层分组的带条纹页。

有关通过程序区分简单页和带条纹页的更多信息,请参阅本文稍后的 GroupLevel 对象。

数据访问页的设计工作面可以由最多四种节构成:

  • 标题 – 标题是简单页的第一个节,或者带条纹页中的一个组级别的第一个节,最典型的情况就是用于为显示在下列页眉节中的字段显示列页眉。但是,标题可能包含数据绑定控件以外的任意类型的控件。您在“设计视图”中创建数据访问页时,并不默认添加标题节。要添加标题节,右键单击页眉节,然后单击“标题”。
  • 页眉 – 尽管这一节称作页眉,但其在功能上类似于窗体或报表的明细节。页眉节主要用于显示数据绑定控件中的数据以及计算值。简单页具有单一的页眉节,每次展示一个记录,而带条纹页每次展示多个记录,以分组级别的形式为每个记录重复页眉节。带有多重分组级别的带条纹页为每个分组级别包含嵌套的页眉节。
  • 页脚 – 页脚节与同一分组级别上的页眉节相关联。页脚节通常用于为显示在相关页眉节中的数据显示合计或小计,但您还可以将绑定添加到字段和其他控件的控件。您在“设计视图”中创建数据访问页时,并不默认添加页脚节。要添加页脚节,右键单击页眉节,然后单击“页脚”。不可将页脚节添加到简单页或带有单一页眉节的带条纹页。在带有分组的页(带有两个或更多页眉节结构的页)上,不可将页脚节添加到分组结构中最低(最内层)级别。
  • 记录浏览 – 记录浏览节是简单页或带条纹页中组级别的最后一个节,与同一分组级别上的页眉节相关联。其中包含一个记录浏览控件,该控件用于在记录之间移动,或对相关页眉节中的记录进行添加、删除、保存、撤销更改或筛选。记录浏览节不得包含数据绑定控件。

Section 对象

在设计时,可以将节看作一个二维容器,用于对您的数据访问页的各个控件和元素进行布局。您在“设计视图”中开始创建数据访问页时,Access 就将单独一个没有任何特定类型的节添加到未绑定节。一个节最初是未绑定的,因为在设计过程开始时,页的“数据源”控件在其 Recordsets 集合内并没有任何可供绑定的 Recordset 对象。有两个方法可以用于将数据绑定到节:

  • 将字段或表从 Field List 拖到节内
  • 设置节属性单中的 RecordSource 属性

用两个方法之一将未绑定的节绑定,使得节成为一个页眉节,并自动添加一个与新的页眉节相关联的浏览节。两种绑定机制均自动将 Recordset 对象添加到与页相关联的“数据源”控件的 Recordsets 集合。通过将所生成 Recordset 对象所定义字段的 ControlSource 属性设置为所需字段的名称,就使这些字段可供绑定控件使用了。

如果您从 Field List 拖放字段或表,Access 就将控件的 ID 属性设置为与绑定字段相同的名称(或在有重复名称的情况下,生成一个独特名称),并设置控件的 ControlSource 属性,从而对其进行绑定。

如果您通过设置 RecordSource 属性然后从“工具箱”将控件添加到一个节来对该节进行绑定,则您必须手动为该控件指定 ControlSource 属性。

提示:您可以通过显示“数据大纲”,查看绑定到页的数据的结构(称为“数据模型”)。要显示“数据大纲”,在“设计视图”中打开数据访问页;指向“视图”菜单上的“工具栏”,然后单击“数据大纲”。您可以查看和设置构成数据模型的各个项目的属性,诸如 GroupingDefPageFieldPageRowSourceRecordset 对象,方法是右键单击大纲中的一个项目,然后单击“属性”。

重要事项:Access 在将某个节绑定到数据时,对该节的 <DIV> 标记的 ID 属性进行设置,以反映节所绑定的表。不得在 Microsoft 脚本编辑器中更改 ID 属性,因为这可能会干扰页的数据绑定功能。另外,如果在“设计视图”中将其他字段添加到节,则 Access 可能会更改节的 ID 属性。因此,在向数据访问页添加脚本之前,您应当首先完成页的基本设计。否则,您就必须对指向节的或该节的各个控件的旧的 ID 属性的所有 <SCRIPT> 标记进行更新。

在运行时,Section 对象的功能就象 HTML DIV 元素和构成某个具体节的 HTML 控件和元素的一个抽象。Section 对象提供了一些方法和属性,使您能够在运行时对节进行操作。

操作节中的数据绑定控件

您在对数据访问页中的数据绑定控件的值进行操纵时,您是要对底层数据库字段进行修改。您所作的更改会立即生效,就象用户进行更改时一样,在记录得到提交时,值就被存回数据库(通过单击记录浏览控件上的“保存”按钮,通过离开记录,或通过 DataPage 对象的 Save 方法)。

访问简单页上的数据绑定控件

您通过将字段或表从“字段列表”拖到数据访问页上,创建数据绑定控件时,Access 就将控件的 ID 属性设为与绑定字段相同的名称。如果是一个简单页,您就可以使用控件的 ID 属性返回或设置控件的 DHTML value 属性。例如,在包含绑定到 CategoryName 字段的控件的一个简单(不带条纹)页中,下面的代码会显示控件的内容:

MsgBox CategoryName.value

同样,要更改字段的值,需要使用下面的语法:

CategoryName.value = newvalue

如果您使用 Bound Span 控件来显示一个只读的字段值,则您无法通过使用 DHTML value 属性来访问其内容,因为底层的 <SPAN> 元素并不支持这一属性。这样,您就必须使用 DHTML innerText 属性来访问控件的内容:

CategoryName.innerText

提示:如果您想访问一个您并不想在数据访问页上显示的字段,则您可以创建一个隐藏的数据绑定控件。为获得最好的效果,创建一个 Bound Span 控件,然后将其 Visibility 属性设为 hidden

访问不带分组的带条纹页上的数据绑定控件

如果您使用的是一个不带分组结构的带条纹页(该页带有单独一个页眉节,而该组级别的 DataPageSize 属性设为大于 1 的值),则同一字段会在页眉节中为每个记录的条纹显示多次。这样,您依旧可以通过其 ID 属性来引用所绑定的控件,但所有在节中显示的值均作为一个零基的数组返回。例如,如果您有一个显示 CategoryName 字段值的带条纹页,则您可以通过使用下面的语法,返回第一个记录的条纹中的值。

MsgBox CategoryName(0).value

您可以通过使用 length 属性,确定数组中值的数目,从而确定节中所显示的记录的数目。例如:

CategoryName.length

下面的代码会对当前所展示的所有 CategoryName 字段进行循环:

For i = 0 To CategoryName.length-1
MsgBox CategoryName(i).value
Next i

提示:这一技巧仅在对不带分组的带条纹页上的所有记录进行循环时有用。要想可靠地访问当前节的某个字段,须使用本文下面各节中所描述的技巧。

访问带分组的带条纹页上的数据绑定控件

上面描述的各个技巧,将适用于简单页以及没有任何嵌套组级别的带条纹页,而带嵌套组级别的带条纹页更加复杂。例如,假设您有一个 Category 页眉节,其中带有一个包含 ProductName 字段的嵌套 Products 页眉节。如果 Products 节起初是折叠起来的,则开始时没有任何 ProductName 控件,因此 ProductName 将是未定义的。如果您所展开的第一个 Category 条纹仅包含一个记录,则将只有一个可以作为单独一个值直接访问的 ProductName 控件。当您展开下一个 Category 条纹时,您会得到一个 ProductName 数组。

您所编写的任何代码,而该代码又依赖 ProductName 字段作为单独一个值或一个值数组—或只是正在定义 ProductName 字段—将不起作用。

因此,另有一个方法可以用于访问条纹中的控件:通过当前节的 HTMLContainer 属性,从而能够访问包含控件的 <DIV> 元素。

要使用 HTMLContainer 属性,借助 CurrentSection 属性来访问当前的节,从“数据源”对象(其在数据访问页上总有 MSODSC 的一个 ID 属性)开始:

MSODSC.CurrentSection

CurrentSection 属性为页上当前拥有焦点的节也就是用户最后一次所点击或按 Tab 键到达的条纹—返回一个 Section 对象。从这一 Section 对象,使用 HTMLContainer 属性来访问包含条纹控件的 HTML <DIV> 元素:

MSODSC.CurrentSection.HTMLContainer

一旦您访问过该条纹的 DIV 元素,您就可以通过下面的语法,使用 DHTML children 集合来访问该条纹内的控件:

MSODSC.CurrentSection.HTMLContainer.children("controlID")

鉴于当前节只能拥有一个与每个名称相对应的控件,这总是返回单独一个值,因此您可以使用类似于下面的语法而不会发生任何问题:

MSODSC.CurrentSection.HTMLContainer.children("phone").value

如果您需要访问当前节内的多个控件,则您可以使用类似于下面的 With...End With 语句:

With MSODSC.CurrentSection.HTMLContainer
.children("LastName").value = "Davolio"
.children("FirstName").value = "Nancy"
End With

如果您想要对单一控件进行多个操作,则您还可以将控件赋予一个变量,例如:

Set fldPhone = _
MSODSC.CurrentSection.HTMLContainer.children("phone")
fldPhone.value = ...

注意:.children("elementname") 语法在没有任何此类元素的情况下,会返回一个错误。如果您不太确定元素是否存在,则请使用错误处理功能。

从页上的控件或其他元素访问节

一个常见情形是,您可以访问某个控件,但您又需要从该控件所在的节访问其他控件和元素。“数据源”控件所提供的 GetContainingSection 方法正可以用于这一目的:

MSODSC.GetContainingSection(element)

在这里,element 是任意一个返回节中某个元素的变量或表达式。如果您正在使用的是一个简单页,则您可以传入节中某个控件的 ID 属性(不要包有引号),例如:

MSODSC.GetContainingSection(CategoryName)

但是如果您正在使用的是一个带条纹页,则您必须连同索引一起传入控件的 ID 属性,以返回一个特定的控件。例如,如果正要对页上的各个节进行循环,就请使用下面的语法:

For i = 0 to CategoryName.length-1
Set sec = MSODSC.GetContainingSection(CategoryName(i))
...
Next i

另外,如果您正在为页上的某个元素编写事件过程,则您可以传入 Me 关键词,以获得对包含元素的节的访问:

<SCRIPT language=vbscript event=onclick for=Command1>
<!--
Set sec = MSODSC.GetContainingSection(Me)
...
-->
</SCRIPT>

还有一个替代方法,就是使用 event 对象的 DHTML srcElement 属性来访问当前的元素,并将其传递给 GetContainingSection 方法:

Set sec = MSODSC.GetContainingSection(window.event.srcElement)

一旦拥有对节的访问,您就可以使用包含节的 HTMLContainer 属性来访问来自 DHTML children 集合的同属对象:

MSODSC.GetContainingSection(element)._
HTMLContainer.children("controlID")

注意:这些示例展示如何使用绑定控件。当然,您还可以使用这一技巧来访问节的 <DIV> 元素内的任意 HTML 元素。

浏览各节

Section 对象提供了 NextSiblingPreviousSiblingNextSectionPreviousSection 属性,使您能够对各节进行浏览。要确定应使用其中哪个属性,您需要了解什么是同属。同属节指的是同一分组级别上的所有节。如果您想在同一分组级别上的节之间移动,就使用 NextSiblingPreviousSibling 属性。NextSectionPreviousSection 属性在节之间移动,无论其分组级别如何,但无法访问折叠起来的节,因此您可以使用这些属性来在页上所有可见的节之间移动。

NextSiblingPreviousSiblingNextSectionPreviousSection 属性并不区分其所要前往的节是何类型。如果您在对节进行操作之前需要确定其类型,则您可以使用 Section 对象的 Type 属性。

在下面的表 1 中,Type 属性返回所列出的 SectTypeEnum 常量中的第一个,这些常量具有所指定的文字值。

表 1:Type 属性所返回的 SectTypeEnum 常量

常量
sectTypeCaption 1
sectTypeFooter 3
sectTypeHeader 2
sectTypeRecNav 4

提示:如果您想从脚本使用为“数据源”控件对象模型的成员定义的命名常量,则您可以使用 DataSourceControl 对象的 Constants 属性。例如,表达式 MSODSC.Constants.sectTypeCaption 返回 sectTypeCaption 常量的文字值。

如果您需要一个在各节之间进行浏览的起始点,则您可以使用 DataPage 对象的 FirstSection 属性返回所指定的数据页上的第一个节。有关数据页定义的更多信息,请参阅本文稍后的 DataPage 对象。

要测试某个节是否已展开,您可以使用 Section 对象的 IsExpanded 属性。要展开或折叠节,您可以使用 Section 对象的 ExpandCollapse 方法。

下面的代码段来自用于“罗斯文商贸”样本数据库中“审阅产品”数据访问页上的 cmdExpandCollapse 按钮的事件过程。该代码段使用上面所述的多个属性和方法,对页上的所有节进行循环,并展开所有的页眉节。

' 访问页的第一个 DataPage 对象。
Set dap = MSODSC.DataPages(0)
' 访问页的第一个节。
Set sect = dap.FirstSection
' 在访问也上的最后一个节之后使用 NextSibling
' 属性会将 sect 变量设为 Nothing (空)。
While Not sect Is Nothing
' 确保节未展开且是一个页眉
' 节 (sectTypeHeader = 2),如果是这样,就将节展开。
If Not sect.IsExpanded and sect.Type = 2 Then
sect.Expand
End If
' 前往下一个同属节。
Set sect = sect.NextSibling
Wend

另外,只要该节已展开,Section 对象就提供 ChildSection 属性,用于访问当前节的分组级别以下的下一节。同样,ParentSection 属性返回当前节的分组级别以上的下一节。您可以通过使用 Section 对象的 MakeCurrent 属性,将焦点设为某个所指定的节,并根据需要将该节滚入视图。

GroupLevel 对象

GroupLevel 对象代表数据访问页分层结构中某个给定级别上的节和记录的集合。正如前面所述,每个分组级别最多可以拥有四个不同的节:标题节、页眉节、页脚节以及记录浏览节—外加分组级别内称为同属的所有节。

GroupLevel 对象主要用作该分组级别上各个节及其所绑定的记录集合之间的桥梁。除了提供用于定义分组自身的各个属性(诸如 GroupOnGroupInterval 属性,这些属性对用于对给定数据类型的项目进行分组的间隔进行确定),GroupLevel 对象还提供了用于控制用户如何与组级别上的数据进行交互的各种属性,诸如 AllowAdditionsAllowDeletions 属性。

重要事项:尽管 Access 的“帮助”将 GroupLevel 对象的所有属性列为“读/写”,但这仅适用于您正在使用 Visual Basic® for Applications 代码来对在“设计视图”中打开的数据访问页进行操作的时候。在运行时,除 DefaultSortExpandedByDefault 属性之外,所有的 GroupLevel 对象属性均为只读。如果您试图设置 GroupLevel 对象的其他某个属性,“数据源”控件会返回 "Run-time error 26072 – Property cannot be set in this mode" (运行时错误 26072 – 无法在这一模式中设置该属性)。

数据访问页中的分组操作,十分类似于报表中的分组操作。但是,与报表不同的是,即使是显示不带任何分层结构的平构记录集合的简单页也拥有一个分组级别。从结构上讲,这使得 GroupLevel 对象能够提供一组简单页和带条纹页能够通用的属性。另外,您的代码可能需要区分不同的页类型;例如,对于简单页,数据绑定控件的值显示为单一值,而对于带条纹页,则显示为数组。

您可以使用 GroupLevels 集合的 Count 属性和 GroupLevel 对象的 DataPageSize 属性来确定您是在操作一个简单页,还是在操作一个带条纹页。Count 属性返回组级别的数目,而 DataPageSize 属性返回或设置位于某个具体组级别时所显示的记录的数目。如果 Count 属性和 DataPageSize 属性均为 1,则您正在操作一个简单页。如果仅其中一个返回 1,则您正在操作一个带条纹页。下面的代码段进行测试,确定页是一个带条纹页,还是一个简单页,然后再继续:

If (MSODSC.GroupLevels(0).DataPageSize > 1) Or
(MSODSC.GroupLevels.Count > 1) Then
' 这里是用于带条纹页的代码。
Else
' 这里是用于简单页的代码。
End If

在大多数情况下,在数据访问页中进行分组操作,是设计时要进行的工作。在页的“设计视图”中,可以以各种方式确定分组方式。例如,确定分层结构的一个方法就是依据您从“字段列表”将字段放在何处。如果您将字段放到一个已有的页眉节之上,则您在现有节之上的一个分组级别上创建一个新的节。同样,如果您将字段放到现有节之下,则您在该节之下创建一个分组。您还可以选择一个字段,然后单击“页设计”工具栏上的“升级”、“按表分组”、“降级”按钮,创建分组。另外,您还可以通过在组级别的页眉节中右键单击,然后单击“组级别属性”,对适用于组级别的一组属性进行操作。

有关在数据访问页中进行分组的更多信息,请在 Access 的“帮助”中搜寻“分组记录”。

DataPage 对象

尽管 DataPage 对象的名称可能看似其所代表的是数据访问页自身,但情况并非如此。一个 DataPage 对象代表的是绑定到构成某个分组级别的各个节的记录集合中的一个。DataSourceControl 对象维持 DataPages 集合,其中包含该页的所有 DataPage 对象。一个 DataPage 对象仅在运行时存在,且仅在必要时进行创建,诸如当某个分组级别内重复条纹中的一个被展开时。结果是,在一个带有两个或更多分组级别的带条纹页上,DataPages 集合中的 DataPage 对象的数目将随所展开的条纹的多少而发生变化。

下图帮助您将 DataPage 对象与带有两个分组级别的带条纹页上的各个节关的联方式形象化。

图 2:DataPage 对象

本图展示总共有三个 DataPage 对象。最顶层的分组级别具有单独一个 DataPage 对象 (DataPages(0)),该对象代表一个记录集,其中列出所有的国家及其客户数目。从第二个分组级别展开的条纹(奥地利和丹麦)对象拥有其各自的 DataPage 对象,代表各个国家中客户的记录集。这些 DataPage 对象被以展开条纹的顺序添加到 DataPages 集合。因为其余国家的条纹是折叠着的,所以没有任何 DataPage 对象与这些条纹相关联。

通常,对于带条纹页,您可以将一个 DataPage 对象看作代表绑定到一组节的记录集,这些节共享一个通用的记录操作控件。分组结构中的最顶层节点会有单独一个 DataPage 对象,而分组结构内的每个展开的节点会有其自己的 DataPage 对象。

一个简单页仅有一个分组级别,结果是总是仅有一个 DataPage 对象与页的单一页眉节相关联。

DataPage 对象为程序员提供了记录集级别的操作,诸如 MoveFirstMoveLastMoveNextMovePrev 方法,这些方法使您能够在特定分组级别内的记录之间移动。FilterIsFilterOn 属性以及 ApplyFilterToggleFilter 方法用于为分组级别的记录定义和应用客户端筛选操作。

提示:要创建客户端筛选操作,请使用 RecordsetDef 对象的 ServerFilter 属性。

DataPage 对象还提供了 Recordset 属性,使您能够访问绑定到具体 Section 对象的 ADO Recordset 对象。如果您所需要进行的记录集操作超过了 DataPage 对象自身所提供的操作,则您可以使用标准的 ADO 代码对节的 Recordset 对象进行操作。

DataPage 对象还以编程方式将 GroupLevel 对象和 Section 对象连接起来。例如,绑定到节的记录集定义的名称由 GroupLevel 对象的 RecordSource 属性决定。下面的代码行展示如何通过使用节的 DataPage 对象的 GroupLevel 属性,访问绑定到节的记录集定义的名称。

MSODSC.CurrentSection.DataPage.GroupLevel.RecordSource

正如前面浏览各节中所描述的那样,DataPage 对象还提供 FirstSection 对象,使您能够访问分组级别中的第一个节,如下面的代码段所示:

' 访问页的第一个 DataPage 对象。
Set dap = MSODSC.DataPages(0)
' 访问页的第一个节。
Set sect = dap.FirstSection

这在对页上的所有节进行循环时十分有用。

ElementExtension 对象

“数据源”控件维持一组 ElementExtension 对象。ElementExtension 对象用于向页上的 HTML 元素添加自定义的与数据有关的属性,诸如绑定的文本框和列表框和 span 控件。ElementExtension 对象结构可供 Access 开发者对页上的 HTML 固有控件的属性进行扩展,同时避免使 HTML 混乱。

ElementExtension 对象主要用于支持数据访问页“设计视图”,以及想从 Visual Basic 代码创建数据访问页的开发者。在运行时从页中的编码进行访问时,ElementExtension 对象的大多数属性为只读。要查看 ElementExtension 属性,您可以进入“设计视图”, 右键单击控件,单击“元素属性”,然后单击“数据”选项卡。

尽管 Access 的“帮助”将 ElementExtension 对象的所有属性列为“读/写”,但这仅适用于您正在使用 Visual Basic® for Applications 代码来对在“设计视图”中打开的数据访问页进行操作的时候。在运行时,除 DefaultValueFormatTotalType 属性除之外,所有的 ElementExtension 对象属性均为只读。如果您试图设置 ElementExtension 对象的其他某个属性,“数据源”控件会返回 "Run-time error 26072 – Property cannot be set in this mode" (运行时错误 26072 – 无法在这一模式中设置该属性)。

如果你在运行时对 ElementExtension 对象的某个“读/写”属性进行设置,则“数据源”控件将不自动为反映这一更改而重绘所显示的记录。要强制记录进行重绘,须通过使用 DataPage 对象的 Recordset 属性,检索当前记录的书签,并将其设置回其自身。下面的代码段演示如何根据组合框中的选定值来将一个控件的 Format 属性更改为 "Currency" 或 "Euro Currency"。该代码是作为一个事件过程而编写的,用于名为 FormatType 的组合框的 DHTML onchange 事件;该组合框有两个选项:"Euro" 或 "Currency"。

Dim sect
Dim strFormat
Dim eeUnitPrice
' 获得当前节。
Set sect = MSODSC.CurrentSection
' 从 FormatType 下拉框获得
' 选定的格式。
strFormat = sect.HTMLContainer.children("FormatType").value
' 获得 UnitPrice 字段的 ElementExtension 对象。
Set eeUnitPrice = MSODSC.ElementExtensions("UnitPrice")
' 将 Format 属性设为选定的格式,
' 然后通过将当前记录的
' Bookmark 属性设置回其自身,强制记录进行重绘。
If  strFormat = "Euro" Then
eeUnitPrice.Format="Euro Currency"
sect.DataPage.Recordset.Bookmark=sect.DataPage.Recordset.Bookmark
Else
eeUnitPrice.Format="Currency"
sect.DataPage.Recordset.Bookmark=sect.DataPage.Recordset.Bookmark
End If

注意:Access 针对 ElementExtension 对象的 Format 属性的“帮助”主题,并没有列出您可以用于设置该属性的格式化字符串。要查看该属性的有效字符串,请在“设计视图”中打开一个页,右键单击一个控件,单击“元素属性”,然后查看“数据”选项卡上的“格式”属性框中的下拉列表中可用的设置。

下面的代码段展示如何从在 Access 中运行的 Visual Basic for Applications 将控件绑定到一个字段。要设置某个元素的 ElementExtension 属性,您首先必须创建 ElementExtension 对象。

Dim ee As ElementExtension
' 为 txtCustomerID 控件添加一项元素扩展。
Set ee = MSODSC.ElementExtensions.Add(ElementID:="txtCustomerID", _
FailIfThere:=False)
' 将扩展的 ControlSource 属性设为指向
' CustomerID 字段。
ee.ControlSource = "CustomerID"

重要事项:前面的代码示例仅在从 Visual Basic for Applications 代码创建数据访问页时有效。不可将其用于在运行时从脚本绑定一个控件。有关以编程方式从运行于 Microsoft Access 的 Visual Basic 代码创建数据访问页的更多信息,请参阅《Microsoft Office 2000/Visual Basic 程序员指南》中的使用数据访问页(英文)。

数据源控件事件

创建用于各种“数据源”控件的事件处理程序的基本步骤如下:

  1. 在 Access 中,以“设计视图”创建或打开一个数据访问页。
  2. 右键单击页,然后单击快捷菜单上的“Microsoft 脚本编辑器”。
  3. 如果当前没有显示“文档大纲”窗口,则请前往“视图”菜单,指向“其他窗口”,然后单击“文档大纲”。
  4. 单击“文档大纲”窗口中的“脚本大纲”按钮,然后展开“客户对象和事件”文件夹。
  5. 在对象列表中找到 MSODSC 对象(数据访问页的“数据源”总是称作 MSODSC),然后单击“+”图标,以显示数据源控件的事件。
  6. 双击您想要使用的事件。
  7. 脚本编辑器会为事件插入一个事件处理程序,并将光标置于其中。下列示例是为 Focus 事件创建的:
    <SCRIPT for=MSODSC event=Focus language=vbscript>
    <!--
    -->
    </SCRIPT>
    
  8. 脚本编辑器并不自动为需要参数的事件插入参数。因为所有的“数据源”控件事件均返回 DSCEventInfo 对象,您需要添加一个参数,以将更改对象传递给您的事件处理程序。即使您的处理程序并不使用 DSCEventInfo 对象的各个属性,您也必须提供该参数,但在大多数情况下,您将用到一个“数据源”控件事件,以便您的代码能够使用这些属性。
    <SCRIPT for=MSODSC event=Focus(info) language=vbscript>
    <!--
    Dim sect
    ' 使用 DSCEventInfo 对象的 Section 属性来
    ' 访问触发了 Focus 事件的节。
    Set sect = info.Section
    ' 显示带焦点的节的名称。
    MsgBox "带焦点的节:" & sect.HTMLContainer.id
    -->
    </SCRIPT>
    

您可以使用下面的语法,将同一事件处理程序创建为一个子例程:

Sub MSODSC_Focus(info)
Dim sect
' 使用 DSCEventInfo 对象的 Section 属性来
' 访问触发了 Focus 事件的节。    Set sect = info.Section
' 显示带焦点的节的名称。
MsgBox "带焦点的节:" & sect.HTMLContainer.id
End Sub

所有的“数据源”控件事件均接受单一的参数,即一个 DSCEventInfo 对象。DSCEventInfo 对象是一个返回一组属性的数据结构,这些属性包含关于所触发的事件的信息。为保持一致,同一结构被用于所有的事件,但只有对应于每个事件的属性被返回。(请参阅表 3,其中对适用于每个事件所支持的一系列 DSCEventInfo 对象属性的“数据源”进行总结。)

下面的表 2 列出 DSCEventInfo 对象所提供的属性。后面跟有“(新)”的属性名,在 Microsoft Office XP Web 组件中为 DSCEventInfo 对象的对象模型添加。

表 2:DSCEventInfo 对象属性

DSCEventInfo 属性 说明
DataPage 为触发了事件的节返回 DataPage 对象。
DisplayAlert (新) 返回或设置一个 DscDisplayAlert 常量,指示在触发 BeforeDeleteBeforeOverwrite 事件时,是否要显示一条警示。该属性可读/写属性。

DscDisplayAlert 属性为:

  • DscDataAlertContinue – 不显示警示。
  • DscDataAlertDisplay – 显示警示,要求用户确认操作。
Error 返回一个 ADO Error 对象,其中包含关于已触发事件的信息。
PercentComplete (新) 返回一个 Long 值,代表当前操作的已完成部分。值为 100 时指示操作已完成。该属性仅被 RecordsetSaveProgress 事件支持。该属性为只读。
ReturnValue 返回或设置一个 Boolean 值,代表所指定事件的返回值。您可以将该属性设为 False,取消某些事件的默认操作。该属性为可读/写属性。
Section 返回一个 Section 对象,代表触发了事件的节。
Status (新) 返回一个 DscStatusEnum 常量,代表当前事件的状态。该属性仅被 AfterDelete 事件支持。该属性为只读。

DscStatusEnum 常量为:

  • dscDeleteCancel – 删除操作成功。
  • dscDeleteOK – 删除操作被通过代码取消。
  • dscDeleteUserCancel – 删除操作被用户取消。

下面的表 3 对“数据源”控件所提供的事件进行总结。后面跟有“(新)”的事件名,是在 Microsoft Office XP Web 组件中为“数据源”控件的对象模型新添的事件。

表 3:数据源控件事件

事件 说明
AfterDelete (新) 发生于记录已被删除或记录删除已被取消之后。该事件用于在删除记录后需要进行一组操作时。

该事件支持 DSCEventInfo 对象的 StatusDataPageSection 属性。

注意:如果删除已成功,则 Section 属性会返回 Nothing,因为节已被从文档删除。

AfterInsert (新) 发生于记录已被插入(添加)之后。该事件用于在插入记录后需要进行一组操作时。

该事件支持 DSCEventInfo 对象的 DataPageSection 属性。

AfterUpdate (新) 发生于记录被更新为新的数据或记录失去焦点之后。

该事件支持 DSCEventInfo 对象的 DataPageSection 属性。

BeforeCollapse 发生于折叠控件被点击或 DataPage 对象的 Collapse 方法被用于折叠数据访问页上的某个条纹时。

该事件支持 DSCEventInfo 对象的 ReturnValueSection 属性。

BeforeDelete (新) 发生于记录被删除之前。该事件用于在删除记录之前需要应用一组条件时。

该事件支持 DSCEventInfo 对象的 ReturnValueDataAlertDataPageSection 属性。

BeforeExpand 发生于展开控件被点击或 DataPage 对象的 Expand 方法被用于展开数据访问页上的某个条纹时。

该事件支持 DSCEventInfo 对象的 ReturnValueSection 属性。

BeforeFirstPage 发生于第一个记录集合被显示在带条纹的数据访问页上时。

该事件支持 DSCEventInfo 对象的 ReturnValueDataPage 属性。

BeforeInitialBind (新) 发生于所指定的数据访问页上的控件被首次绑定到记录集时。该事件用于在用数据填充控件之前设置数据访问页的属性。

注意:如果为该事件编写的代码进行一项要求“数据源”控件获取数据的操作,则在您进行该操作时,页中的控件会被填充。例如,当使用 ConnectionDefaultRecordset 属性来检索页的 ADO ConnectionRecordset 对象,然后又使用各种方法,就其进行数据检索。

该事件不支持 DSCEventInfo 对象的任何属性。

BeforeInsert (新) 发生于用户点击导航工具栏的“新建”按钮。

该事件支持 DSCEventInfo 对象的 ReturnValueDataPageSection 属性。

BeforeLastPage 发生于最后一个记录集合被显示在带条纹的数据访问页上时。

该事件支持 DSCEventInfo 对象的 ReturnValueDataPage 属性。

BeforeNextPage 发生于下一个记录集合被显示在带条纹的数据访问页上时。

该事件支持 DSCEventInfo 对象的 ReturnValueDataPage 属性。

BeforeOverwrite (新) 发生于在使用 ExportXML 时一个已有 XML 或架构文件正要被覆写时。

该事件支持 DSCEventInfo 对象的 ReturnValueDataAlert 属性。

重要事项:当数据访问页正在 Internet Explorer 中运行时,该事件不激发。如果数据源控件正在一个 Visual Basic 应用程序或一个 HTML 应用程序 (HTA) 中运行,则该事件就会激发。

BeforePreviousPage 发生于前一个记录集合被显示在带条纹的数据访问页上时。

该事件支持 DSCEventInfo 对象的 ReturnValueDataPage 属性。

BeforeUpdate (新) 发生于数据已被更改但记录集尚未更新之前。该事件用于在将数据提交给数据库之前,对其进行证实。

该事件支持 DSCEventInfo 对象的 ReturnValueDataPageSection 属性。

Current 发生于某个记录成为当前记录时。

该事件支持 DSCEventInfo 对象的 DataPageSection 属性。

DataError 发生于发生了数据错误时。

该事件支持 DSCEventInfo 对象的 Error 属性。

DataPageComplete 发生于所指定的数据访问页完成加载时。

该事件支持 DSCEventInfo 对象的 DataPage 属性。

Dirty (新) 发生于用户更改数据访问页上某个记录的内容时。该事件在 BeforeUpdate 之前激发。

该事件支持 DSCEventInfo 对象的 ReturnValueDataPageSection 属性。

Focus (新) 发生于数据访问页中某个节获得焦点时。

该事件支持 DSCEventInfo 对象的 DataPageSection 属性。

RecordExit (新) 发生于用户浏览到另一个记录,刷新数据访问页或关闭数据访问页时。该事件发生在 BeforeUpdate 事件之后,但在事件被更改之前。如果是带条纹数据访问页,则在同一父记录的子记录中间移动并不会激发该事件。

该事件支持 DSCEventInfo 对象的 ReturnValueDataPageSection 属性。

重要事项:无法以编程方式控制用户是否能够关闭浏览器或离开页,因为这会结束运行数据访问页背后的组件的进程。因此,如果您试图取消通过将 ReturnValue 属性设为 False 来取消事件,则代码会被忽略。但是,您可以使用 DHTML onbeforeunload 事件来显示一个消息框,警告用户不要关闭或离开页,从而避免这一情况的发生。

RecordsetSaveProgress (新) 重复发生于 ExportXML 方法被调用时。使用该事件来在某个记录集被导出时,向用户提供反馈。

该事件支持 DSCEventInfo 对象的 ReturnValuePercentComplete 属性。

重要事项:在撰写本文时,使用 PercentComplete 属性来提供反馈可能会不太稳定。另外,在 Web 页上运行时,Internet Explorer 不对当前页的内容进行更新,直到脚本让出控制,而这在 ExportXML 方法完成时才会发生。结果是,如果您向保存为 XML 的页添加一个进度表,则该进度表看起来不会更新。我们可以绕过这一情形,方法是打开第二个窗口,其中包含进度表,或创建一个 ActiveX 控件,聆听事件并显示一个进度表。

Undo (新) 发生于用户点击浏览控件上的“撤销”按钮,按下 ESC 键,或 Dirty 事件被取消时。该事件激发于数据被还原为其原始值之前。使用该数据来设置允许用户撤销更改的条件。

该事件支持 DSCEventInfo 对象的 ReturnValueDataPageSection 属性。

除了使用“数据源”控件事件,数据访问页背后的脚本还可能需要使用 DHTML 事件。但是,一般来讲,您仅需要为那些在用户与页上的控件进行交互时才激发的事件编写脚本,诸如按钮的 onclick 事件,或组合框控件的 onchange 事件。另外,正如上面在对 RecordExit 事件进行描述时所提到的,在用户卸载页之前需要对其进行通知的情况下,您可能需要为 DHTML onbeforeunload 事件编写脚本。DHTML 文档对象模型确实包含 onbeforeupdateonafterupdate 等等数据绑定事件,这些事件通过“数据源”控件显示为 BeforeUpdateAfterUpdate 事件。为获得最为可靠的交互性,您应当使用“数据源”控件的数据绑定事件,而不是相应的 DHTML 文档对象模型事件。

Access 2002 数据访问页有何新功能?

除了 DataSourceControl 对象的新增事件,Microsoft Office XP Web 组件还为 DataSourceControl 对象及其子对象提供了多个新的方法和属性。下面的表格简要总结这些新的方法和属性。(有关细节,请参阅 Microsoft 脚本编辑器的“帮助”或找到 OWCVBA10.chm 文件,其中包含 Microsoft Office XP Web 组件帮助,直接将其打开即可。)

表 4:DataSourceControl 对象的新方法

方法 说明
EuroConvert 您可以使用 EuroConvert 方法来将某个金额转换为欧元或从欧元转换为某个参加国货币。您还可以将欧元作为媒介,使用该方法将某个金额从一种参加国货币转换为另一种参加国货币(三角关系)。EuroConvert 方法使用欧洲委员会所确立的各种固定汇率。返回一个 Double 值。
ExportXML 将当前的记录集保存为一个 XML 文件。
Nz 使用该方法来返回零、零长度字符串 ("") 或在值为 Null 时返回另一个指定值。例如,您可以使用这一函数来将 Null 值转换为另一值,从而避免通过表达式来传播。返回一个 Variant
RefreshJetCache 刷新数据访问页与 Microsoft Access 数据库的连接。
SetRootRecordset 为指定的 DataSourceControl 对象设置根记录集。该方法用于更改数据访问页所绑定的 ADO 记录集。

表 5:DataPage 的新方法

方法 说明
ApplyFilter 依据当前所选定的字段对数据页上的记录进行筛选。其功能等同于记录操纵控件上的“按选定内容筛选”按钮。
SortAscending 依据当前所选定的字段以升序对数据访问页上的字段进行排序。其功能等同于记录操纵控件上的“升序”按钮。
SortDescending 依据当前所选定的字段以降序对数据访问页上的字段进行排序。其功能等同于记录操纵控件上的“降序”按钮。
ToggleFilter 对已应用到数据访问页的当前筛选的状态进行切换。如果筛选已启用,则调用该方法会解除筛选。第二次调用该方法会重新应用筛选。其功能等同于记录操纵控件上的“切换”按钮。

表 6: DataSourceControl 对象的新属性

属性 说明
ConnectionFile 返回或设置对 Office Database Connection (.odc) 或 Microsoft Data Link (.udl) 文件进行指定的字符串;该文件用于将数据访问页连接到数据源。该属性为可读/写属性。
IsDirty 返回或设置一个 Boolean 值,指示自上次以来,数据访问页上的某个事件的内容是否更改过。该属性为可读/写属性。
Offline 返回一个 Boolean 值,指示 Microsoft Internet Explorer 是否正处于脱机模式。该属性为只读。
OfflinePublication 返回或设置一个 String 值,表示在数据访问页脱机时所要使用的 SQL Server 出版物。该属性为可读/写属性。
OfflineSource 返回或设置一个 String 值,表示在数据访问页脱机时所要使用的数据源。该属性为可读/写属性。
OfflineType 返回或设置一个 DscOfflineTypeEnum 常量,表示在数据访问页脱机时所要用于保持数据的连接类型。该属性可读/写属性。

DscOfflineTypeEnum 常量为:

  • dscOfflineMerge – 数据被存储于本地 MSDE 数据库。
  • dscOfflineNone – 在数据访问页脱机时,数据不可用。
  • dscOfflineWorkflow – 该属性不支持该常量。
  • dscOfflineXMLDataFile – 数据被存储于 XML 数据文件。
UseXMLData 返回或设置数据访问页是否将绑定到 XML 数据。该属性返回一个 Boolean 值,且可读/写。
XMLDataTarget 返回或设置一个 String 值,表示加载或保存 XML 数据的位置。该属性为可读/写属性。
XMLLocation 返回或设置一个 DscXMLLocationEnum 常量,指定是在 XML 数据文件还是在当前数据访问页内的 XML 数据岛加载或保存 XML 数据。该属性可读/写属性。

DscXMLLocationEnum 常量为:

  • dscXMLDataFile – XML 数据被存储在单独一个文件中。
  • dscXMLEmbedded – XML 数据被存储在当前数据访问页内的一个 XML 数据岛中。

表 7: GroupLevel 对象的新属性

属性 说明
AllowAdditions 返回或设置一个 Boolean 值,表示用户是否可以向所指定的组级别添加记录。将该属性设为 False,防止用户向组级别添加记录。默认值为 True。该属性在设计时为可读/写属性,在运行时为只读。
AllowDeletions 返回或设置一个 Boolean 值,表示用户是否可以从所指定的组级别删除记录。将该属性设为 False,防止用户从组级别删除记录。默认值为 True。该属性在设计时为可读/写属性,在运行时为只读。
AllowEdits 返回或设置一个 Boolean 值,表示用户是否可以编辑所指定的组级别中的记录。将该属性设为 False ,防止用户编辑组级别中的记录。默认值为 True。该属性在设计时为可读/写属性,在运行时为只读。
AlternateRowColor 返回或设置一个 String 值,表示要在所指定组级别中隔行使用的色彩。该属性在设计时为可读/写属性,在运行时为只读。
RecordSelector 返回或设置一个 Boolean 值,指示是否要为所指定组级别显示记录选择器。该属性在设计时为可读/写属性,在运行时为只读。

表 8: ElementExtension 对象的新属性

属性 说明
Format 返回或设置一个 String 值,表示所指定元素的数字格式。该属性为可读/写属性。

其他信息

有关在数据访问页中编写脚本的更多信息,请参见下列文章:

  • 向页添加自定义的筛选和搜索功能(英文)
  • 将页绑定到断开的记录集(英文)
  • 创建弹出式数据访问页(英文)
  • 在运行时自定义数据访问页上的控件(英文)
  • 在数据访问页中内嵌一个已有的页(英文)
  • 使用数据访问页数据来添加自定义功能的示例(英文)
  • 向数据访问页传递参数(英文)

为数据访问页中的数据源控件编写脚本相关推荐

  1. easyui中tab页中js脚本无法加载的问题及解决方法

    我发现tab页中<script src="xxx.js">方式加载的脚本没有生效,firebug看请求也没有请求相应的脚本文件. 单独在浏览器中打开tab页中的页面js ...

  2. 服务器页是指包含什么脚本程序的网页,有会做的吗?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1. [多选题] 在Windows服务器中,下列服务定位为角色的是( ) AWeb服务 BDNS服务 CDHCP服务 D终端服务 ESMTP服务 FTel ...

  3. python编写脚本替换 jar包文件_shell-替换jar包中配置文件脚本

    脚本运行平台:centos7.3 1.编写脚本 vi /tmp/change.sh #!/bin/bash #需要替换的包名称 bmc=$1 #需要替换的文件名称 hhwjmc=$2 #找到替换文件路 ...

  4. 修改器内置脚本编写_Node.js 中实践 Redis Lua 脚本

    对别人的意见要表示尊重.千万别说:"你错了."--卡耐基 Lua 是一种轻量小巧的脚本语言,用标准 C 语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提 ...

  5. 【Elasticsearch】如何在 Elasticsearch 中轻松编写脚本

    随着 Elasticsearch 5.x 的发布,Painless 出现了,这是 Elasticsearch 对安全.可靠和高性能脚本编写的回答.我们将向您介绍 Painless 并向您展示它的功能. ...

  6. Unity3d中角色的动画脚本的编写

    感谢  wyb314 的分享 1.Unity3D中角色的动画脚本的编写(一) 2. Unity3D中角色的动画脚本的编写(二) 3.Unity3D中角色的动画脚本的编写(三)

  7. Linux中shell语法和脚本编写

    Linux中shell语法和脚本编写 原文地址:学习shell的语法,及脚本编写 其它相关辅助资料: 编写shell脚本所需的语法和示例 基础linux指令&简单的shell语法和脚本编写 什 ...

  8. 服务器页是指包含什么脚本程序的网页,XSS攻击的本质就是被攻击者访问的页面返回页面中,包含了未经编码的脚本代码,如等信息。而浏览 - 众答网问答...

    相关题目与解析 XSS攻击产生的原理是攻击者通过向Web页面里插入(),从而达到特殊目的. SQL注入和XSS跨站攻击,是WEB安全中常见攻击类型,稳居OWASPTOP10.针对SQL注入和XSS跨站 ...

  9. 静态页中利用AJAX.NET实现无刷新页面

    一. 导言 我们知道,ASP.net应用程序事实是在服务器上运行的,用户的请求要不断地送往远程的服务器,服务器执行完本地的程序后把重新装载页面再发送客户端.所以就出现了不断刷新的问题,页面不断闪烁.用 ...

最新文章

  1. TensorFlow 2.0发布在即,高级API变化抢先看
  2. 中国地图_铜板画地图铜地球仪高档办公室装饰用品定制铜版画地图中国地图世界地图定制惠风堂铜雕艺术...
  3. 《操作系统》OS学习(五):连续内存分配 内存碎片、动态分配、碎片整理、伙伴系统
  4. 诗和远方:无题(四十九)
  5. 前端学到什么水平就可以去找工作呢?
  6. php case 多个条件判断语句,Shell case语句(多分支条件判断)
  7. Elasticsearch高级查询2:ES 高级查询
  8. java写企业员工信息管理系统
  9. sql2000 数据库置疑解决办法
  10. 微信小程序最新富文本编辑器使用功能实例教程
  11. linux用户motd,linux – 每个用户的SSH MOTD
  12. 短视频、移动AI……你关注的热点移动开发技术都在这
  13. 玩乐购与京东天猫深度合作 打造云购全网最低价
  14. 十九、 指派问题 - 匈牙利法 (0-1 整数规划)
  15. excel 错位插入_EXCEL单元格错位如何对齐:excel表格数据错位
  16. 阅读javascript高级程序设计随笔(五)
  17. HTML中的表格及样式的设置
  18. Linux 6.2:华为代码加速核心功能 715 倍!
  19. MYSQL压力测试工具
  20. 马尾综合征的患者常用的药物

热门文章

  1. android 模拟屏幕点击
  2. 微信公众号菜单如何直接跳到微信小程序
  3. java枚举values_java枚举中的values遍历
  4. koa返回404 NOT FOUND
  5. 基于TF-IDF与KMeans的海量新闻文本聚类
  6. 微博传播在企业品牌营销中的优势
  7. Day5 atomic
  8. java 设计模式之桥接模式,策略模式
  9. android设备id完美解决方法,安卓获取渠道名渠道id Android获取设备唯一标识的终极解决方法,防止安卓7.0时崩溃问题...
  10. 如何向合约中质押bnb