使用 ASP 实现的数据库网格控件






4.74/5 (32投票s)
2001年5月13日
2分钟阅读

539910

10998
一个用 JavaScript 编写的 ASP 网格控件,用于显示记录集。
引言
一个用于在 Web 上编辑数据库的网格控件。它使用 ASP 和 JavaScript 编写,但也可以完全从 VBScript 使用。只需几行代码,您就可以使用此控件编辑您的数据。
特点
- 保护您不希望用户编辑的字段。
- ID 字段可以在其他记录集中查找值。
- 按支持排序的任何列排序。
- 具有自定义页面大小的分页。
- 自动检测主键,但也可以手动覆盖。
- 使用自定义 SELECT 语句获取新记录的默认值。
用法
要使用网格,您可以通过在 JavaScript 中调用 new BGrid(rs)
来创建它,或者您可以选择通过调用 CreateGrid(rs)
来创建它,这也可以从 VBScript 中使用。两种方法中的参数是您希望网格显示的记录集。此记录集应允许前后移动,因此我通常将 CursorLocation
设置为 adUseClient
在我的连接上。
我太懒了,无法手动声明所有这些 ad 常量,因此我在 config.asa 的顶部添加了以下内容。这意味着所有 ADO 常量都可用,并且是使演示正常工作而无需大量工作所必需的。
<!-- METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library"
TYPE="TypeLib" UUID="{00000205-0000-0010-8000-00AA006D2EA4}" -->
一个简单的例子:
使用网格只需要几行代码
<%@Language="JavaScript%">
<!--#include file=misc.asp-->
<!--#include file=b.dropdown.asp-->
<!--#include file=b.grid.asp-->
<form method=post>
<%
var Conn = CreateConnection(); // CreateConnection is defined in misc.asp
var rs = Server.CreateObject("ADODB.Recordset");
rs.Open("EmployeeTerritories",Conn,adOpenStatic,adLockOptimistic,adCmdTable);
var Grid = new BGrid(rs);
Grid.Process(); // Process must be called to handle saving and such stuff
Grid.Display(); // Display does just that
Grid = null;
rs.Close();
rs = null;
Conn.Close();
Conn = null;
%>
</form>
由于 EmployeeTerritories 表有一个名为 TerritoryID 的字段,它是 Territories 表的外键,我们可以告诉网格从该表中查找要显示的值,而不是显示一个毫无意义的 ID
var rsTerritories = Conn.Execute("Territories");
Grid.SetLookup("TerritoryID",rsTerritories,"TerritoryID","TerritoryDescription");
当记录正在编辑时,它看起来会像这张图片
函数
CreateGrid(recordset)
Grid.Process()
Grid.Display()
Grid.SetDefault(field,sql)
Grid.ProtectFields(fieldlist)
Grid.SetLookup(fkfield,recordset,pkfield,displayfield)
Grid.SetOption(option,value)
其中一些在上面解释过,但还有一些我还没有提到
Grid.SetOption(option,value)
option 可以是以下之一:“debug”、“pagesize”、“pk”、“truncate”。value 根据选项而异。“debug”需要一个布尔值,“pagesize”需要一个数字,“pk”是手动覆盖的主键的逗号分隔字段列表,而“truncate”需要一个数字来知道网格中每个字段应显示多少个字符。一些例子
Grid.SetOption("debug",true); // default is false Grid.SetOption("pagesize",20); // default is 10 Grid.SetOption("pk","field1,field2"); // if the primary key can't be found Grid.SetOption("truncate",30); // Don't display more than 30 characters
Grid.SetDefault(field,sql)
field 是记录集中字段的名称,而 sql 是用于查找此网格中新记录的默认值的 sql 语句。
Grid.SetDefault("UserID","select max(UserID)+1 from TheTable"); // NOT the way to do it, // but it shows the usage. Grid.SetDefault("HireDate","select getdate()"); // This was better perhaps. Grid.SetDefault("MinAge","select 18"); // A constant.
Grid.ProtectFields(fieldlist)
保护 fieldlist 中的字段免于编辑。例如
Grid.ProtectFields("UserID,HireDate"); // UserID and HireDate can't be edited.