求asp无限级树型菜单源代码,最好是带数据库的!

求asp无限级树型菜单源代码,最好是带数据库的!,第1张

关于SELECT的无限联动菜单

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)

}

}

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9648496.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存