index.asp
程序代码:
<html>
<head>
<title></title>
<meta content="text/htmlcharset=gb2312" http-equiv="content-type">
<style type="text/css"><!--
FONT{font-size:12px}
TD{font-size:12px}
A{color:#333399}
A:hover{color:#FF6600}
--></style>
<script language="Javascript" type="text/Javascript"><!--
function funOnload(){
document.all.list_file.src="jscript_city.asp?base=0&sele=0-&elem=Select01"
}
//pBase级数,以0基,
//pSele是<option 的value值
//pEle是下一级的表单名字
function chgSelect(pBase,pSele,pElem){
//当改变了一个列表之后。清除以后的列表的值。
for(i=parseInt(pElem.replace("Select",""))i<=5i++){
var tmp="000"+i
var pElem1=eval("document.Form1.Select"+tmp.substr(tmp.length-2))
pElem1.length=1
pElem1.selectedIndex=0
}
//JS用ASP得到数据库的数据来更新下级列表
document.all.list_file.src="jscript_city.asp?base="+pBase+"&sele="+pSele+"&elem="+pElem
}
//--></script>
<script id="list_file" language="Javascript" type="text/Javascript" src=""></script>
</head>
<body bgcolor="#FFFFFF" leftmargin="0" topmargin="2" text="#333333" onload="funOnload()">
<form name="Form1">
<select name="Select01" onchange="chgSelect(1,this.options[this.selectedIndex].value,'Select02')">
<option value="">省...</option>
</select>
<select name="Select02" onchange="chgSelect(2,this.options[this.selectedIndex].value,'Select03')">
<option value="">市...</option>
</select>
<select name="Select03" onchange="chgSelect(3,this.options[this.selectedIndex].value,'Select04')">
<option value="">县...</option>
</select>
<select name="Select04" onchange="chgSelect(4,this.options[this.selectedIndex].value,'Select05')">
<option value="">乡...</option>
</select>
<select name="Select05">
<option value="">村...</option>
</select>
</form>
</body></html>
'jscript_city.asp
程序代码:
<%
' varBase 下拉菜单等级
' varSele 所选择下拉菜单项的数据库ID
' varElem 下一级的表单名称
varBase=Request.QueryString("base")
varSele=Left(Request.QueryString("sele"),InStr(Request.QueryString("sele"),"-")-1)
varElem=Request.QueryString("elem")
varDistName=""
varAutoID=""
Set conDB=Server.CreateObject("ADODB.CONNECTION")
conDB.Open "Driver={Microsoft Access Driver (*.mdb)}DBQ="&Server.Mappath("db1.mdb")
sqlCommand="select * from table1 where filed1="&varBase&" and filed2="&varSele
Set rsRecord=conDB.Execute(sqlCommand)
While Not rsRecord.eof
varDistName=varDistName&chr(34)&rsRecord("filed3")&chr(34)
varAutoID=varAutoID&chr(34)&rsRecord("id")&chr(34)
rsRecord.movenext
If Not rsRecord.Eof Then
varDistName=varDistName&","
varAutoID=varAutoID&","
End If
Wend
Response.Write("var varDistName=new Array("&varDistName&")"&vbcrlf)
Response.Write("var varAutoID=new Array("&varAutoID&")"&vbcrlf)
Response.Write("var varElem=eval("&chr(34)&"document.Form1."&varElem&chr(34)&")"&vbcrlf)
Response.Write("varElem.length=varDistName.length+1"&vbcrlf)
Response.Write("for(var i=0i<varDistName.lengthi++){"&vbcrlf)
Response.Write("varElem.options[i+1].text=varDistName"&vbcrlf)
Response.Write("varElem.options[i+1].value=varAutoID+'-'+varDistName"&vbcrlf)
Response.Write("}"&vbcrlf)
Response.Write("varElem.selectedIndex=0"&vbcrlf)
%>
db1.mdb
'-------------------------------------------------
福建 厦门 思明 黄厝 曾厝桉村
福建 泉州 丰泽 西湖 水头村
如上面的五级转成数据库为:
'-------------------------------
idfiled1filed2filed3
100福建
211厦门
311泉州
422思明
534黄厝
645曾厝桉村
723丰泽
837西湖
948水头村
'-------------------------------------------------
数据库说明:
id 自动编号
filed1 下拉菜单列表的等级(看级数。可以设置它的精度。是数字类型)
filed2 上一级的id号(用长整型吧)
filed3 这个就不用说了吧(文件。长度自己看情况)
本程序在IIS4+WIN2000P+ACCESS2000下通过。
用js直接得数据,安全性不允许,所以从别的方面着手,看你的要求,其实说白了,就是要生成树,那么,只需要将数据取出来生成树即可。假设数据库中有表 t_tree,采用无限级分类设置
字段有:
ID,//节点ID
parentNodeID, //父级节点ID
nodeName, //节点名称
nodeLink //节点链接,就是你的 xxx.html
那么:
前台:
<div id="treeStr" runnat=server></div>
用asp.net得到datatable(用asp.net的填充,填充到dt),如下:
string treeStr = "<script>"
treeStr = ""//这里可以放树的树始化等其它javascript的东西。
for(int i=0i<dt.rows.counti++)
{
treeStr += "d.add("
treeStr += dt.rows[i]["ID"].toString() + ","
treeStr += dt.rows[i]["parentNodeID"].toString() + ","
treeStr += dt.rows[i]["treeLink"].toString() +")"//这里最后一个括号及分号是前台js的
}
treeStr += "</script>"
treeStr.innerHTML = treeStr
页面<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Tree.aspx.cs" Inherits="MyTeachers.web.Tree" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TreeView ID="TreeView1" runat="server" Height="257px" ImageSet="WindowsHelp"
Width="142px" Target="rightFrame">
</asp:TreeView>
</div>
</form>
</body>
</html>
后台
using System
using System.Collections.Generic
using System.Linq
using System.Web
using System.Web.UI
using System.Web.UI.WebControls
using System.Web.Security
using System.Web.UI.WebControls.WebParts
using System.Web.UI.HtmlControls
using System.Data
namespace MyTeachers.web
{
public partial class Tree : System.Web.UI.Page
{
DataView dv
DataTable dt
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
int id =Convert.ToInt32(Session["userID"])
//数据库执行查询的方法就不写了。
//Operator op = new Operator()
//这里执行的是:select * from tabmenu
dt = BLL.tabMenuBLL.GetAlltabMenut(id)
//第一次加载时调用方法传参
CreateTree(0, null, dt, this.TreeView1)
}
}
/// <summary>
/// 创建一个树
/// </summary>
/// <param name="parentID">父ID</param>
/// <param name="node">节点</param>
/// <param name="dt">DataTable</param>
/// <param name="treeView">TreeView的名称</param>
public void CreateTree(int parentID, TreeNode node, DataTable dt, TreeView treeView)
{
//实例化一个DataView dt = 传入的DataTable
dv = new DataView(dt)
//筛选(相当于select * from tabMenu where menuParentID = 传入的 parentID)
dv.RowFilter = "[pid]=" + parentID
//用foreach遍历dv
foreach (DataRowView row in dv)
{
//第一次加载时为空
if (node == null)
{
//创建根节点
TreeNode root = new TreeNode()
//root.Target = "rightFrame"
//必须与数据库的对应
root.Text = row["menuName"].ToString()
root.Value = row["menuID"].ToString()
//添加根节点
this.TreeView1.Nodes.Add(root)
//递归调用方法本身
CreateTree(int.Parse(row["menuID"].ToString()), root, dt, treeView)
}
else
{
//添加子节点
TreeNode childNode = new TreeNode()
childNode.Text = row["menuName"].ToString()
childNode.Value = row["menuID"].ToString()
childNode.NavigateUrl = row["menuUrl"].ToString()
node.ChildNodes.Add(childNode)
CreateTree(int.Parse(row["menuID"].ToString()), childNode, dt, treeView)
}
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)