惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

云风的 BLOG
云风的 BLOG
The Last Watchdog
The Last Watchdog
L
Lohrmann on Cybersecurity
P
Proofpoint News Feed
I
Intezer
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Cisco Talos Blog
Cisco Talos Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
S
Schneier on Security
罗磊的独立博客
AWS News Blog
AWS News Blog
S
Securelist
J
Java Code Geeks
月光博客
月光博客
V
Vulnerabilities – Threatpost
博客园 - 【当耐特】
有赞技术团队
有赞技术团队
G
GRAHAM CLULEY
Project Zero
Project Zero
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
DataBreaches.Net
The Hacker News
The Hacker News
Know Your Adversary
Know Your Adversary
The GitHub Blog
The GitHub Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Scott Helme
Scott Helme
博客园 - Franky
S
Security Affairs
Cyberwarzone
Cyberwarzone
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Forbes - Security
Forbes - Security
K
Kaspersky official blog
Martin Fowler
Martin Fowler
Schneier on Security
Schneier on Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
宝玉的分享
宝玉的分享
腾讯CDC
Application and Cybersecurity Blog
Application and Cybersecurity Blog
G
Google Developers Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
美团技术团队
MyScale Blog
MyScale Blog
L
LangChain Blog
V
V2EX
N
News | PayPal Newsroom
N
News and Events Feed by Topic
aimingoo的专栏
aimingoo的专栏
Blog — PlanetScale
Blog — PlanetScale
IT之家
IT之家

博客园 - Anson2020

SQL Server 清除数据库日志脚本 让 Firefox 也支持 outerHTML StringSplitOptions Enumeration [转] - Anson2020 Hibernate映射类型对照表 [转] 解决 .setAttribute 添加JS或者CSS 在IE下不起作用. - Anson2020 Oracle 生成 GUID 类型 [转] Internet Explorer 8 Beta 1 已发布并提供下载! Eclipse编写代码可以设置源文件的编码方式UTF-8 [转] .NET 实战SSL安全加密机制 [转] IE Firefox css 差别 [转] 关于Service Unavailable的解决方法 [转] 解决JavaME中的内存泄漏 [转] 转载(正则表达式) [转] ORACLE Text 文本检索 仿Google和Windows Live的JS+DIV Drag [转] Input的高级用法11例 Asp.Net避免按钮重复点击(转) [转] ASP.NET 缓冲: 技术及最佳实践 [转] 支付宝Payto接口的c#.net实现
Ajax Tree
Anson2020 · 2007-11-19 · via 博客园 - Anson2020

1.建立一个aspx页面
html代码

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Ajax Tree</title>
<link type="text/css" href="http://www.cnblogs.com/Styles/tree_css/tree.css" rel="stylesheet">
</head>
<body>
<form id="Form1" runat="server">
<div class="TreeMenu" id="CategoryTree" style="width: 100%; height: 489px">
</div>
<script language="javascript" type="text/javascript">
function el(id)
{
return document.getElementById(id);
}
function ExpandSubCategory(iCategoryID)
{
var li_father = el("li_" + iCategoryID);
if (li_father.getElementsByTagName("li").length > 0//分类已下载
{
ChangeStatus(iCategoryID);
return;
}

li_father.className 

= "Opened";

switchNote(iCategoryID, 

true);
AjaxMethod.GetSubCategory(iCategoryID, GetSubCategory_callback);
}
function GetSubCategory_callback(response)
{
var dt = response.value.Tables[0];
if (dt.Rows.length > 0)
{
var iCategoryID = dt.Rows[0].FatherID;
}
var li_father = el("li_" + iCategoryID);
var ul = document.createElement("ul");
for (var i = 0;i < dt.Rows.length;i++)
{
if (dt.Rows[i].IsChild == 1//叶子节点
{
var li = document.createElement("li");
li.className 
= "Child";
li.id 
= "li_" + dt.Rows[i].CategoryID;var img = document.createElement("img");
img.id 
= dt.Rows[i].CategoryID;
img.className 
= "s";
img.src 
= "http://www.cnblogs.com/Styles/tree_css/s.gif";var a = document.createElement("a");
var id = dt.Rows[i].CategoryID;
a.onmouseover 
= function()
{
PreviewImage(id);
};
a.href 
= "javascript:OpenDocument('" + dt.Rows[i].CategoryID + "');";
a.innerHTML 
= dt.Rows[i].CategoryName;
}
else
{
var li = document.createElement("li");
li.className 
= "Closed";
li.id 
= "li_" + dt.Rows[i].CategoryID;var img = document.createElement("img");
img.id 
= dt.Rows[i].CategoryID;
img.className 
= "s";
img.src 
= "http://www.cnblogs.com/Styles/tree_css/s.gif";
img.onclick 
= function () {
ExpandSubCategory(
this.id);
};
img.alt 
= "展开/折叠";var a = document.createElement("a");
a.href 
= "javascript:ExpandSubCategory(" +
dt.Rows[i].CategoryID 
+ ");";
a.innerHTML 
= dt.Rows[i].CategoryName;
}
li.appendChild(img);
li.appendChild(a);
ul.appendChild(li);
}
li_father.appendChild(ul);

switchNote(iCategoryID, 

false);
}
// 叶子节点的单击响应函数
function OpenDocument(iCategoryID)
{
// 预加载信息
PreloadFormUrl(iCategoryID);
}
function PreviewImage(iCategoryID)
{

}

function ChangeStatus(iCategoryID)
{
var li_father = el("li_" + iCategoryID);
if (li_father.className == "Closed")
{
li_father.className 
= "Opened";
}
else
{
li_father.className 
= "Closed";
}
}
function switchNote(iCategoryID, show)
{
var li_father = el("li_" + iCategoryID);
if (show)
{
var ul = document.createElement("ul");
ul.id 
= "ul_note_" + iCategoryID;var note = document.createElement("li");
note.className 
= "Child";var img = document.createElement("img");
img.className 
= "s";
img.src 
= "http://www.cnblogs.com/Styles/tree_css/s.gif";var a = document.createElement("a");
a.href 
= "javascript:void(0);";
a.innerHTML 
= "请稍候";

note.appendChild(img);
note.appendChild(a);
ul.appendChild(note);
li_father.appendChild(ul);
}

else
{
var ul = el("ul_note_" + iCategoryID);
if (ul)
{
li_father.removeChild(ul);
}
}
}
// 加载根节点
var tree = el("CategoryTree");
var root = document.createElement("li");
root.id 
= "li_0";
tree.appendChild(root);
// 加载页面时显示第一级分类
ExpandSubCategory(0);function PreloadFormUrl(iCategoryID)
{
// 采用同步调用的方式获取图片的信息
var ds = AjaxMethod.GetFormsList(iCategoryID).value;
// 如果返回了结果
if (ds)
{
// 判断数据表是否不为空
if (ds.Tables[0].Rows.length > 0)
{
// 返回的信息数据表
dt = ds.Tables[0];
el(
"furl").src = dt.Rows[0].FormUrl;
}
else // 分类下没有
{
}
}
}
</script>
</form>
</body>
</html>

2.cs代码

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using AjaxPro;public partial class Pages_Home_HomePage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
AjaxPro.Utility.RegisterTypeForAjax(
typeof(AjaxMethod));
}
}

3.建立一个tree.css的css样式

a
{
text-decoration
:none;
}
a,a:visited
{
color
:#000;
background
:inherit;
}
body
{
margin
:0;
padding
:20px;
font
:12px tahoma,宋体,sans-serif;
}
dt
{
font-size
:22px;
font-weight
:bold;
margin
:0 0 0 15px;
}
dd
{
margin
:0 0 0 15px;
}
h4
{
margin
:0;
padding
:0;
font-size
:18px;
text-align
:center;
}
p
{
margin
:0;
padding
:0 0 0 18px;
}
p a,p a:visited
{
color
:#00f;
background
:inherit;
}

.TreeMenu img.s

{
cursor
:hand;
vertical-align
:middle;
}
.TreeMenu ul
{
padding
:0;
}
.TreeMenu li
{
list-style
:none;
padding
:0;
}
.Closed ul
{
display
:none;
}
.Child img.s
{
background
:none;
cursor
:default;
}

#CategoryTree ul

{
margin
:0 0 0 17px;
}
#CategoryTree img.s
{
width
:34px;
height
:18px;
}
#CategoryTree .Opened img.s
{
background
:url(skin3/opened.gif) no-repeat 0 1px;
}
#CategoryTree .Closed img.s
{
background
:url(skin3/closed.gif) no-repeat 0 1px;
}
#CategoryTree .Child img.s
{
background
:url(skin3/child.gif) no-repeat 13px 2px;
}

#CategoryTree

{
float
:left;
width
:249px;
border
:1px solid #99BEEF;
background
:#D2E4FC;
color
:inherit;
margin
:3px;
padding
:3px;
height
:600px;
}

4.建立一个类AjaxMethod

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using AjaxPro;/**//// <summary>
/// Summary description for AjaxMethod
/// </summary>
public class AjaxMethod
{
public AjaxMethod()
{
//
// TODO: Add constructor logic here
//
}
[AjaxMethod(HttpSessionStateRequirement.ReadWrite)]
public static DataSet GetSubCategory(int iCategoryID)
{
string sql = string.Format("SELECT CategoryID, CategoryName, FatherID, dbo.IsLeaf(CategoryID) as IsChild FROM Category WHERE FatherID = {0}", iCategoryID);
return GetDataSet(sql);
}

[AjaxMethod(HttpSessionStateRequirement.ReadWrite)]

public static DataSet GetFormsList(int iCategoryID)
{
string sql = string.Format("SELECT * FROM forms WHERE form_category_id = {0}", iCategoryID);
return GetDataSet(sql);
}
public static string ConnectionString = ConfigurationSettings.AppSettings["ConnectionString"].ToString();public static DataSet GetDataSet(string sql)
{
SqlDataAdapter sda 
= new SqlDataAdapter(sql, ConnectionString);
DataSet ds 
= new DataSet();
sda.Fill(ds);
if (ds != null)
return ds;
else
return null;
}
}

5.sql脚本

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Category]'and OBJECTPROPERTY(id, N'IsUserTable'= 1)
drop table [dbo].[Category]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Forms]'and OBJECTPROPERTY(id, N'IsUserTable'= 1)
drop table [dbo].[Forms]
GOCREATE TABLE [dbo].[Category] (
[CategoryID] [int] IDENTITY (11NOT NULL ,
[CategoryName] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[FatherID] [int] NULL
ON [PRIMARY]
GOCREATE TABLE [dbo].[Forms] (
[FormID] [int] IDENTITY (11NOT NULL ,
[FormName] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[FormUrl] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Form_category_id] [int] NULL ,
[target] [char] (10) COLLATE Chinese_PRC_CI_AS NULL
ON [PRIMARY]
GO
CREATE FUNCTION IsLeaf (@cat_id int)
RETURNS int AS
BEGINdeclare @count int
select @count = (select count(*from Category where FatherID=@cat_id)
if (@count=0)
return 1
return 0END