|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
asp对于服务器的要求较高,一般的服务器如果访问量一大就垮了,不得不重启。javascript|静态|数据|革新/////////////byxxrl(孔曰成仁,孟曰取E)
/////////////Chinese:蒋健华
/////////////email:jjh_115@eyou.com
联动,联动,联动。。。。困扰了很多多少网友的神经,在CSDN-ASP板块中,老是看到网友们大叫拯救,救甚么?联动!为何联动如许遭到存眷,实在用性情有可原,用户也能承认,但是假如数据是大批并互相联系关系的,那成绩就来了,怎样辨认并显现是一个很忧?的成绩。那事实有无一个很好的办理举措呢?谜底是一定的,由于我们有asp和javascript,哈哈,那末我们就入手下手举动吧!
我们要取得的数据,既然要到达联动的效果,一定这些数据是有联系关系的,那末我们用如许的实例来讲明我们的办法
筹办前提:
SQLSERVER2000中文企业版,IIS5.0+,IE5.0+,固然,最好有一个好的编纂器,VS.NET就不错,固然,假如你是记事本的反对者,那我也没举措。L
我们以人事办理中的部门级别举行联动办法的申明,熟悉办理中的部门级别能够如许界说,也是实践企业的界说划定规矩,**化工场/**体系/**部,举例申明就是
××化工场/营销体系/市场部,在文中,FirstOrganization表对应的是”××化工场”,SecondOrganization对应的是”营销体系”,ThirdOrganization对应的是”市场部”
在SQLSERVER2000中新建两个表,大概三个表,为了我们能更年夜限制的发扬联动的功效,我们建三个表,呵呵。
数据库称号:xxrl_STUDY,用户名xxrl_STUDY,暗码xxrl_STUDY
接着建ODBC数据源,你也能够不必,但我如许用,呵呵
ODBC名:xxrl_ODBC,用用户名xxrl_STUDY,暗码xxrl_STUDY毗连,指向xxrl_STUDY数据库,默许中文设置,测试DD>ok
新建表:
第一个表FirstOrganization
SQL剧本以下:
ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[FirstOrganization])andOBJECTPROPERTY(id,NIsUserTable)=1)
droptable[dbo].[FirstOrganization]
GO
CREATETABLE[dbo].[FirstOrganization](
[id][int]IDENTITY(1,1)NOTNULL,
[OrganizationName][varchar](100)COLLATEChinese_PRC_CI_ASNOTNULL,
[Description][varchar](8000)COLLATEChinese_PRC_CI_ASNULL
)ON[PRIMARY]
GO
第二个表SecondOrganization
SQL剧本以下:
ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[SecondOrganization])andOBJECTPROPERTY(id,NIsUserTable)=1)
droptable[dbo].[SecondOrganization]
GO
CREATETABLE[dbo].[SecondOrganization](
[id][int]IDENTITY(1,1)NOTNULL,
[parentID][int]NOTNULL,
[OrganizationName][varchar](100)COLLATEChinese_PRC_CI_ASNOTNULL,
[Description][varchar](8000)COLLATEChinese_PRC_CI_ASNULL,
[OrderNumber][int]NULL
)ON[PRIMARY]
GO
第三个表ThirdOrganization
SQL剧本以下:
ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[ThirdOrganization])andOBJECTPROPERTY(id,NIsUserTable)=1)
droptable[dbo].[ThirdOrganization]
GO
CREATETABLE[dbo].[ThirdOrganization](
[id][int]IDENTITY(1,1)NOTNULL,
[parentID][int]NOTNULL,
[OrganizationName][varchar](100)COLLATEChinese_PRC_CI_ASNOTNULL,
[Description][varchar](8000)COLLATEChinese_PRC_CI_ASNULL,
[OrderNumber][int]NULL
)ON[PRIMARY]
GO
Ok,ODBC,我们建好了,数据库也建好了,至于站点的设置,我想人人都应当晓得的,这里不再报告。这里我的站点IP是http://200.100.100.88(外部收集IP)
终究入手下手写程序喽,好累,噗哧,噗哧,刚帮我同事搬器材,歇一会儿,coffee-ing……….
好的,为了便利IIS他白叟家,我们也懒得敲过剩的字母,我们是伶俐的,不勤奋的程序员,原本程序员就已够累的了,还不便利我们本人?嘿嘿,赞成者拍手,啪啪啪啪,faint,哪来的鞭炮?啥家的小孩也欠好好管管。。。。。。。。。J
新建default.asp文件,我们在写以下程序,
创建数据库毗连工具,
setobjconn=server.CreateObject("adodb.connection")
objconn.Open"xxrl_ODBC","xxrl_STUDY","xxrl_STUDY"
然后翻开我们要举行操纵的3个数据集
dimsql1,sql2,sql3
sql1="select*fromFirstOrganization"
sql2="select*fromSecondOrganization"
sql3="select*fromThirdOrganization"
‘/////////////////////////翻开第一构造库
setrs1=server.CreateObject("adodb.recordset")
rs1.Opensql1,objconn,1,1
setrs2=server.CreateObject("adodb.recordset")
rs2.Opensql2,objconn,1,1
setrs3=server.CreateObject("adodb.recordset")
rs3.Opensql3,objconn,1,1
建一个SELECT范例的HTTP控件,包括在form表单中以下:
‘////////////////////控件的初始值是从FirstOrganization中读取的,FirstOrganization在本例子中只要一个数据就是××化工场代码以下:
<formname=form1style="margin:0;"method="post">
<selectname=FirstOrganization>
<%
ifrs1.RecordCount>0then
Response.Write"<optionvalue="&rs1(“id”)&”>”&rs1("OrganizationName")&"</option>"
Else
Response.Write"没有设置"
endif
%>
</select>
</form>
好,这就是我们的联动功效的头
上面我们要创建第二个select控件了,第二个select控件中,我们用到了onchange函数,关于这个函数的具体注释,请看MSDN。代码以下(包括在form中):
<selectname=SecondOrganizationonchange=”ChangeLocationi(form1.SecondOrganization.options[form1.SecondOrganization.selectedIndex].value);”>
<optionvalue=””>-------------</option>
<%
ifrs2.RecordCount<0then
response.write“<optionvalue=””””>库中没有部门!</option>”
else
whilenotrs2.eof
response.write“<optionvalue=”&rs2(“id”)&”>”&rs2(“OrganizationName”)&”</option>”
rs2.movenext
wend
endif
%>
</select>
OK,第二个也弄定,上面我们来创建第三个SELECT一样放在form表单里,以下:
<selectname=ThirdOrganization>
</select>
不要健忘关数据集噢,
rs1.close
setrs1=nothing
rs2.close
setrs2=nothing
rs3.close
setrs3=nothing
ok,页面元素全体筹办停当,上面入手下手我们真实的联动之旅。
本例子接纳ASP和JAVASCRIPT交互的办法取数据库中的数据,因为我们在form表单前我们新建script剧本快,因为要交互,以是我们要这么写才干很好的交互
<%=”<scriptlanguage=javascript>”%>
</script>
然后我们就能够在script块中誊写我们的程序了。
我们的基础操纵是依据二级下拉中得出三级下拉,二级我们都从数据库中掏出来了,上面我们要取三级构造的数据了,以下
<%=”<scriptlanguage=javascript>”%>
<%’asp块
dimsql_GetThirdOrganization
sql_GetThirdOrganization="select*fromThirdOrganizationorderbyiddesc"
setrs_GetThirdOrganization=server.CreateObject("adodb.recordset")rs_GetThirdOrganization.Opensql_GetThirdOrganization,objconn,1,1
%>
vartemp,temp_2;//////////////javascript块
temp=0;///////////////////for轮回变量初始化
Related=newArray();//////////////////////数组,用来寄存三级构造的id,称号,和对应的父ID
<%
temp_2=0‘一个一时变量,用来寄存三级构造的个数
whilenotrs_GetThirdOrganization.eof‘轮回第三级构造
%>
////////////三维分离对应的第三级构造的ID,第三级构造的称号
////////////第三级别构造的父ID(即第二级别ID)
Related[<%=temp_2%>]=newArray("<%=rs_GetThirdOrganization(“id”)%>","<%=rs_GetThirdOrganization(“OrganizationName”)%>","<%=rs_GetThirdOrganization(“parentID”)%>");
<%
temp_2=temp_2+1
rs_GetThirdOrganization.movenext
wend
%>
temp=<%=temp_2%>;
functionChangeLocation(id){////
varid=id;承受二级菜单的选择的item的索引值
document.form1.ThirdOrganization.length=0;//初始化第三级菜单的长度,下标从0入手下手
vari=0;
/////////////////初始化第三级菜单的text和value属性的值,第一个参数值是text”--------”,二是////////value空值
document.form1.ThirdOrganization.options[0]=newOption(-------,);
////////////轮回数组,用数组的第三维数(父ID)和函数传过去的数举行对照
for(i=0;i<temp;i++){
if(Related[i][2]==id){/////////假如相称,证实在第三级内里有输出第二级构造的子集
///////////////////并将子集(第三级)的值赋给第三个select,
document.form1.ThirdOrganization.options[document.form1.ThirdOrganization.length]=newOption(Related[i][1],Related[i][0]);
}
}
}
</script>
最初在页面的最初可不要忘了增加objconn.close噢,呵呵
下面先容的器材,次要是依据选择第二个select来联动第三个select,那末假如我们在第三个select控件处如许再界说一个函数以下:
<selectname=ThirdOrganizationonchange=”fnChangeAgain(form1.ThirdOrganization.options[form1.ThirdOrganization.selectedIndex].value)”>
</select>
如许,再在script块中再写一个一样的函数,函数内容同ChangeLocation函数,是否是完成了三级联动,那末依此类推,呵呵,10级别联动都能够做,只不外贫苦罢了,固然,你也能够用其他的办法,大概用一个表来对应算法,这任意你,我这例子也是从我实践开辟中得来的一点履历堆集,次要是为了思绪明晰,为不懂程序的人好保护,以是将构造分隔,由于不才从不保护,嘿嘿。
炎天要已往了,呵呵,祝人人安康!祝将来的中秋佳节高兴,我又要一团体在外埠过喽。因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。还无法完全实现一些企业级的功能:完全的集群、负载均横。 |
|