`
xiang588
  • 浏览: 304244 次
  • 性别: Icon_minigender_1
  • 来自: 甘肃平凉
社区版块
存档分类
最新评论

利用ASP和XML实现客户端多表单域数据动态更新

阅读更多
在基于Internet 的学校学籍管理系统开发过程中,遇到这么个问题:如何实现客户端多个表单域之间的数据动态更新?如下图所示,在同一个客户端页面有三个下拉列表表单域 ListCollege、ListDepart、ListClass,分别从SQL Server数据库服务器端获得学校名称、系部名称、班级名称,其中前两项数据量较小,而班级名称这一项有上百个记录。

<v:shapetype o:spt="75" coordsize="21600,21600" filled="f" stroked="f" id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" o:connecttype="rect" gradientshapeok="t"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style="width: 414pt; height: 165.75pt;"><v:imagedata src="file:///C:%5CDOCUME%7E1%5CXUXIAN%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.jpg" o:title="search"></v:imagedata></v:shape>

从数据查询速度和程序易用性角度考虑,本页面载入时应该有尽量少的数据量,而且要能在一个查询页面中完成查询条件的选 择。简单地说,就是要实现在同一个客户端页面中,在前两个下拉列表中选择了相应的学校名称和系部名称后,在第三个下拉列表(班级)中只有符合前两项条件的 若干个记录以供客户选择。但是在不刷新本页面的情况下,由于在客户端必须通过Submit才能和服务器端取得联系并获得数据,所以很难实现。
可行的方法至少有如下三种:
1、利用数组来实现
在页面载入时将全部数据(如班级名称)通过记录集全部放到相应的数组ArrClass中。当用户选择了相应的学校或系部 后,将其值放到相应变量College或Department中,同时通过前两个下拉列表框的onChange事件调用客户端函数 SelectClass。这个函数的功能就是根据变量的值在数组中依次查找到符合条件的数组元素,将其作为下拉列表ListClass的Option项。 通过这个方法,可以在不刷新页面、不重复传递大量数据的情况下实现客户端动态数据更新。但是,其缺点是显然的,那就是当打开页面时用户得有足够的耐心去忍 受通过缓慢的网络从服务器获得大量查询数据(如有上百条以上记录)。
2、利用asp.net来实现
微软已经推出了其asp.net技术,通过其能很方便的实现这个功能。但是asp.net的运行解释基础不再是asp.dll,而是.net平台(测试版),111M的asp.net平台相信还不是客户的首选。
3、通过ASP和XML来实现
通过ASP和XML组件的结合,可以很方便的实现这个功能。特点就是页面不用刷新,数据传输实时动态,数据量少,不用把大量的数据传到客户端,速度相对较快。
下面就通过实例介绍实现客户端多表单域动态数据更新的第三种方法。
开发环境如下,经调试成功通过:

WWW服务器<o:p> </o:p>

windows 2000 server(IIS 5)<o:p> </o:p>

数据库<o:p> </o:p>

SQL Server 7.0<o:p> </o:p>

浏览器<o:p> </o:p>

Internet Explore 5.5<o:p> </o:p>

数据库名称<o:p> </o:p>

gzz_back<o:p> </o:p>

<o:p> </o:p>





<o:p> </o:p>

table名称<o:p> </o:p>

字段1<o:p> </o:p>

字段2<o:p> </o:p>

字段3<o:p> </o:p>

字段4<o:p> </o:p>

pcollege<o:p> </o:p>

college_name<o:p> </o:p>

college_code<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

pdepartment<o:p> </o:p>

department_name<o:p> </o:p>

department_code<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

pspecialty  <o:p></o:p>

 specialty_name<o:p> </o:p>

specialty_code<o:p> </o:p>

college_code<o:p> </o:p>

department_code<o:p> </o:p>

pclass<o:p> </o:p>

specialty_code<o:p> </o:p>

class_name<o:p> </o:p>

class_code   <o:p></o:p>

<o:p> </o:p>

 
文件1:index.asp(主页面)
<!-- index.asp -->
<%@ LANGUAGE="VBSCRIPT"%>
<!--#include file="adovbs.inc" -->
<%
strPathInfo=Request.ServerVariables("PATH_INFO")
strPathInfo="http://"&Request.ServerVariables("SERVER_NAME")&
left(strPathInfo,InstrRev(strPathInfo,"/"))
set conn=Server.CreateObject("ADODB.connection")
conn.open"driver={SQL Server};server=JYZD-WMG;uid=sa;pwd=;
database=gzz_back;"
%>
<%
set Rscollege= Server.CreateObject("ADODB.Recordset")
Rscollege.Source ="SELECT DISTINCT college_name FROM dbo.pcollege"
Rscollege.activeconnection=conn
Rscollege.CursorType = 0
Rscollege.CursorLocation = 2
Rscollege.LockType = 3
Rscollege.Open()
arrcollege=rscollege.GetRows()
Rscollege.numRows = 0
%>
<%
set Recordset3 = Server.CreateObject("ADODB.Recordset")
Rsdepartment.Source ="SELECT department_name FROM dbo.pdepartment"
Rsdepartment.activeconnection=conn
Rsdepartment.CursorType = 0
Rsdepartment.CursorLocation = 2
Rsdepartment.LockType = 3
Rsdepartment.Open()
arrdepartment=Rsdepartment.GetRows()
Rsdepartment.numRows = 0
%>
<%
Rscollege.Close()
Rsdepartment.Close()
conn.close()
set Rscollege=nothing
set Rsdepartment=nothing
%>
<script language="vbscript">
<!--
sub beginyear_onclick()
classfrm.endyear.value=classfrm.beginyear.value+1
end sub
-->
</script>
<html>
<head>
<title>用ASP和XML实现多表单域数据动态更新示例</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script language="javascript">
<!--
function SelectClass()
{
//清空班级表单
for(var i=classfrm.listclass.options.length-1;i>=0;--i)
{
classfrm.Listclass.options.remove(i);
}
var collegename=classfrm.listschool.options(classfrm.listschool.selectedIndex).value;
var departname=classfrm.listdepart.options(classfrm.listdepart.selectedIndex).value;
var oXMLDoc=new ActiveXObject('MSXML');
sURL='<%=strPathInfo%>XMLclass.asp?college='+collegename+'&
depart='+departname;
oXMLDoc.url=sURL;
var oRoot=oXMLDoc.root;
if(oRoot.children!=null)
{
for(var i=0;i<oRoot.children.length;++i)
{
oItem=oRoot.children.item(i);
sName=oItem.text;
var oOption=document.createElement('OPTION');
oOption.text=sName;
oOption.value=sName;
classfrm.listclass.options.add(oOption);
}
}
}
-->
</script>
</head>
<body text="#000000" bgcolor="#FFFFD7">
<div align="center">
<table width="80%" border="1" bordercolordark=darkgray bordercolorlight=aliceblue
height="210" align="center" >
<tr>
<td colspan="2" height="4">
<div align="center"> <font size="5"><b>综合示例</b></font></div>
</td>
</tr>
<tr>
<td width="145" height="186">
<div align="center"><font color="#000000">请选择 </font></div>
<p align="center"><font color="#000000">学年/学期/班级</font></p>
</td>
<td width="443" height="186" >
<form name="classfrm" method="post" action="SearchPlan.asp">
<div align="center">
<%dim sumyear %>
<%sumyear=year(date)+1%>
<select name="classbeginyear" size="1" >
<option value="<%=sumyear%>" ><%=sumyear%></option>
<%sumyear=sumyear-1%>
<option value="<%=sumyear%>" selected><%=sumyear%></option>
<%for i=1 to 18 %>
<%sumyear=sumyear-1%>
<option value="<%=sumyear%>" ><%=sumyear%></option>
<%next%>
</select>
<%sumyear=year(date)%>
<input name="classendyear" value="<%=sumyear+1%>" readonly >
年度
<select name="classterm" size="1">
<option value="1" selected>第一</option>
<option value="2">第二</option>
</select>
学期<br>
<br>
<select name="classschool" id="classschool" onchange="chooseclass()">
<%for i=lbound(arrpr1,2) to ubound(arrpr1,2)%>
<option value="<%=arrpr1(0,i)%>"><%=arrpr1(0,i)%></option>
<%next%>
</select>
学校
<select name="classdepart" id="classdepart" onchange="chooseclass()">
<%for i=lbound(arrpr3,2) to ubound(arrpr3,2)%>
<option value="<%=arrpr3(0,i)%>"><%=arrpr3(0,i)%></option>
<%next%>
</select>
系部<br> <br>
<select name="classname" id="classname"> </select>
<script language="vbscript">
<!--
call chooseclass()
-->
</script>
班级</div>
<p align="center">
<input type="submit" name="Submit1" value="确定发送" onClick="searchclass">
<input type="reset" name="reset1" value="重填"> </p>
</form>
</td>
</tr>
</table>
</div>
</body>
</html>

文件2:xmlclass.asp(动态数据查询,由主页面获得查询值)
<!-- xmlclass.asp -->
<%@ LANGUAGE="VBSCRIPT" %>
<%
collegename=trim(Request.QueryString("college"))
departmentname=trim(Request.QueryString("depart"))
set conn=Server.CreateObject("ADODB.connection")
conn.open "driver={SQL Server};server=JYZD-WMG;uid=sa;pwd=;
database=gzz_back;"
changstr="select class_name from pclass where specialty_code in ( select specialty_code
from pspecialty where college_code in ( select college_code from pcollege
where college_name='"&collegename&"') and department_code in ( select
department_code from pdepartment where department_name
='"&departmentname&"')) "
set Rsclass = Server.CreateObject("ADODB.Recordset")
Rsclass.Source =changstr
Rsclass.activeconnection=conn
Rsclass.CursorType = 0
Rsclass.CursorLocation = 2
Rsclass.LockType = 3
Rsclass.Open()
arrclass=recordset2.GetRows()
Rsclass.numRows = 0
%>
<? xml version="1.0" encoding="gb2312" ?>
<classes>
<%For i =LBound(arrclass,2) To UBound(arrclass,2)%>
<class>
<%=arrclass(0,i)%>
</class>
<%Next%>
</classes>

在index.asp中,当在listcollege或listdepart两个下拉列表中选择了相应的学校和系部后, 触发selectclass函数,在此函数中通过ASP文件传值方式(如xmlclass?college=江阴高等技术学院&depart=电 子工程系)向xmlclass.asp传递查询条件,然后由Rsclass记录集从服务器端获得符合条件的班级记录,并通过数组返送到客户端 listclass下拉列表。通过这种方式,从而在不刷新页面、只传递少量数据的情况下实现了客户端多表单域的数据动态更新。
分享到:
评论

相关推荐

    XML高级编程pdf

    15.6 提供XML功能的ASP 15.7 客户端页面 15.8 “以编号浏览”XSL样式表 15.9 “以名字浏览”XSL样式表 15.10 激活XSL样式表 15.11 问题:保持树的同步 15.12 小结 第16章 实例研究2—XML和分布式 应用程序 ...

    ASP200问.EXE

    74.如何用in关键字实现数据的批量删除 75.如何只读取数据库的前几条记录且如何实现排行榜 76.如何实现在多个表中查询数据 77.如何用ASP实现通用条件查询模块 78.如何在ASP整合SQL语句 79.如何实现不刷新页面筛选...

    XML 高级编程(高清版)

    15.6 提供XML功能的ASP 15.7 客户端页面 15.8 “以编号浏览”XSL样式表 15.9 “以名字浏览”XSL样式表 15.10 激活XSL样式表 15.11 问题:保持树的同步 15.12 小结 第16章 实例研究2—XML和分布式 应用程序 ...

    XML高级编程 (Extensible Markup Language)

    15.6 提供XML功能的ASP 15.7 客户端页面 15.8 “以编号浏览”XSL样式表 15.9 “以名字浏览”XSL样式表 15.10 激活XSL样式表 15.11 问题:保持树的同步 15.12 小结 第16章 实例研究2—XML和分布式 应用程序 ...

    XML高级编程

    15.6 提供XML功能的ASP 665 15.7 客户端页面 668 15.8 “以编号浏览”XSL样式表 676 15.9 “以名字浏览”XSL样式表 678 15.10 激活XSL样式表 679 15.11 问题:保持树的同步 680 15.12 小结 683 第16章 实例研究2—...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    另外,还专门介绍了ASP.NET4 新增的功能,如MVC 和动态数据等。  《ASP.NET 4高级程序设计(第4版)》适合各层次的ASP.NET程序员阅读。 =================== 第一部分 核心概念 第1章 ASP.NET简介 1.1 ASP.NET的...

    ASP.NET3.5从入门到精通

    9.3.1 SQL UPDATE 数据更新语句 9.3.2 使用Command 对象更新记录 9.3.3 使用DataSet 数据集更新记录 9.4 ASP.NET 删除数据 9.4.1 SQL DELETE 数据删除语句 9.4.2 使用Command 对象删除记录 9.4.3 使用DataSet 数据集...

    ASP.NET 3.5 开发大全

    9.3.1 SQL UPDATE数据更新语句 9.3.2 使用Command对象更新记录 9.3.3 使用DataSet数据集更新记录 9.4 ASP.NET删除数据 9.4.1 SQL DELETE数据删除语句 9.4.2 使用Command对象删除记录 9.4.3 使用DataSet数据集删除...

    ASP.NET4高级程序设计(第4版) 3/3

    另外,还专门介绍了ASP.NET4 新增的功能,如MVC 和动态数据等。  《ASP.NET 4高级程序设计(第4版)》适合各层次的ASP.NET程序员阅读。 作者简介 作者:(美)麦克唐纳 目录 第一部分 核心概念 第1章 ASP.NET简介 ...

    ASP.NET 3.5 开发大全word课件

    9.3.1 SQL UPDATE数据更新语句 9.3.2 使用Command对象更新记录 9.3.3 使用DataSet数据集更新记录 9.4 ASP.NET删除数据 9.4.1 SQL DELETE数据删除语句 9.4.2 使用Command对象删除记录 9.4.3 使用DataSet数据集删除...

    ASP.NET 3.5 开发大全11-15

    9.3.1 SQL UPDATE数据更新语句 9.3.2 使用Command对象更新记录 9.3.3 使用DataSet数据集更新记录 9.4 ASP.NET删除数据 9.4.1 SQL DELETE数据删除语句 9.4.2 使用Command对象删除记录 9.4.3 使用DataSet数据集删除...

    ASP.NET 3.5 开发大全1-5

    9.3.1 SQL UPDATE数据更新语句 9.3.2 使用Command对象更新记录 9.3.3 使用DataSet数据集更新记录 9.4 ASP.NET删除数据 9.4.1 SQL DELETE数据删除语句 9.4.2 使用Command对象删除记录 9.4.3 使用DataSet数据集删除...

    asp.net知识库

    ADO.NET 2.0 大批量数据操作和多个动态的结果集 ADO.NET 2.0 异步处理 在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的类+...

    ASPNET35开发大全第一章

    9.3.1 SQL UPDATE数据更新语句 9.3.2 使用Command对象更新记录 9.3.3 使用DataSet数据集更新记录 9.4 ASP.NET删除数据 9.4.1 SQL DELETE数据删除语句 9.4.2 使用Command对象删除记录 9.4.3 使用DataSet数据集删除...

    asp.net技术内幕(1)

    用检验控件执行表单的检验 &lt;br&gt;3.1 使用客户端检验 3.1.1 配置客户端检验 3.1.2 启用和禁用客户端检验 3.2 必填域:RequiredFieldValidator控件 3.3 检验表达式:RegularExpressionValidator...

    ASP.net技术内幕

    7.3.1 配置IIS 7.3.2 WML和XML 7.3.3 创建卡片集 7.3.4 用WML链接文件 7.4 使用ASP.NET可移动控件 7.4.1 创建可移动表单 7.4.2 动态激活可移动表单 7.4.3 显示文本 ...

    JSValidation-----强大而灵活的表单客户端验证框架

    如首页所说,JSValidation是客户端表单验证框架,用在BS系统中,或者简单的网页系统中。表单验证在这些开发中很常见:新用户注册,需要校验某些字段;用户登陆,需要校验;等等。在这之前,页面开发者...

    asp.net技术内幕(5)

    用检验控件执行表单的检验 &lt;br&gt;3.1 使用客户端检验 3.1.1 配置客户端检验 3.1.2 启用和禁用客户端检验 3.2 必填域:RequiredFieldValidator控件 3.3 检验表达式:RegularExpressionValidator...

    asp.net技术内幕(4)

    用检验控件执行表单的检验 &lt;br&gt;3.1 使用客户端检验 3.1.1 配置客户端检验 3.1.2 启用和禁用客户端检验 3.2 必填域:RequiredFieldValidator控件 3.3 检验表达式:RegularExpressionValidator...

Global site tag (gtag.js) - Google Analytics