65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.74/5 (32投票s)

2001年5月13日

2分钟阅读

viewsIcon

539910

downloadIcon

10998

一个用 JavaScript 编写的 ASP 网格控件,用于显示记录集。

Sample Image - bgrid1.gif

引言

一个用于在 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");

当记录正在编辑时,它看起来会像这张图片

Editing

函数

  • 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.
© . All rights reserved.