1. 建立一个aspx页面
html代码
<html xmlns=" http://www.w3.org/1999/xhtml " >
<head id="Head1" runat="server">
<title>小山</title>
<link type="text/css" href="../../Styles/tree_css/tree.css" rel="stylesheet">
</head>
<Körper>
<form id="Form1" runat="server">
<Tabellenbreite=100 % Zellpadding=0 Zellabstand=0 Rand=0>
<colgroup>
<col width=180 />
<col />
</colgroup>
<tr>
<td>
<div class="TreeMenu" id="CategoryTree" style="width: 100%; height: 489px">
</div>
</td>
<td>
<iframe id=furl height=20 style="height: 497px; width: 100%;"></iframe>
</td>
</tr>
</table>
<script language="jscript">
Funktion el(id)
{
return document.getElementById(id);
}
Funktion ExpandSubCategory(iCategoryID)
{
var li_father = el("li_" + iCategoryID);
if (li_father.getElementsByTagName("li").length > 0) //分类已下载
{
ChangeStatus(iCategoryID);
zurückkehren;
}
li_father.className = "Geöffnet";
switchNote(iCategoryID, true);
AjaxMethod.GetSubCategory(iCategoryID, GetSubCategory_callback);
}
Funktion 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 = "../../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;
}
anders
{
var li = document.createElement("li");
li.className = "Geschlossen";
li.id = "li_" + dt.Rows[i].CategoryID;
var img = document.createElement("img");
img.id = dt.Rows[i].CategoryID;
img.className = "s";
img.src = "../../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);
}
// 叶子节点的单击响应函数
Funktion OpenDocument(iCategoryID)
{
// 预加载信息
PreloadFormUrl(iCategoryID);
}
Funktion PreviewImage(iCategoryID)
{
}
Funktion ChangeStatus(iCategoryID)
{
var li_father = el("li_" + iCategoryID);
if (li_father.className == "Geschlossen")
{
li_father.className = "Geöffnet";
}
anders
{
li_father.className = "Geschlossen";
}
}
Funktion switchNote(iCategoryID, show)
{
var li_father = el("li_" + iCategoryID);
wenn (zeigen)
{
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 = "../../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);
}
anders
{
var ul = el("ul_note_" + iCategoryID);
wenn (ul)
{
li_father.removeChild(ul);
}
}
}
// 加载根节点
var tree = el("CategoryTree");
var root = document.createElement("li");
root.id = "li_0";
tree.appendChild(root);
// 加载页面时显示第一级分类
ExpandSubCategory(0);
Funktion PreloadFormUrl(iCategoryID)
{
// 采用同步调用的方式获取图片的信息
var ds = AjaxMethod.GetFormsList(iCategoryID).value;
// 如果返回了结果
wenn (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-Version
Verwenden des Systems;
Verwenden von System.Data;
Verwenden von System.Configuration;
Verwenden von System.Collections;
mit System.Web;
mit System.Web.Security;
mit System.Web.UI;
mit System.Web.UI.WebControls;
mit System.Web.UI.WebControls.WebParts;
mit System.Web.UI.HtmlControls;
mit AjaxPro;
öffentliche Teilklasse Pages_Home_HomePage: System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Utility.RegisterTypeForAjax(typeof(AjaxMethod));
}
}3. Die Datei „tree.css“ wird in „css“ angezeigt
A
{}{
Textdekoration: keine;
}
a,a:besucht
{}{
Farbe:#000;
Hintergrund: erben;
}
Körper
{}{
Rand:0;
Polsterung:20px;
Schriftart:12px Tahoma,宋体,sans-serif;
}
dt
{}{
Schriftgröße:22px;
Schriftstärke:fett;
Rand:0 0 0 15px;
}
dd
{}{
Rand:0 0 0 15px;
}
h4
{}{
Rand:0;
Polsterung:0;
Schriftgröße:18px;
text-align:center;
}
P
{}{
Rand:0;
Polsterung:0 0 0 18px;
}
pa,pa:besucht
{}{
Farbe:#00f;
Hintergrund: erben;
}
.TreeMenu img.s
{}{
Cursor:Hand;
vertikal ausrichten:mitte;
}
.TreeMenu ul
{}{
Polsterung:0;
}
.TreeMenu li
{}{
Listenstil:none;
Polsterung:0;
}
.Geschlossene Ul
{}{
Anzeige:keine;
}
.Kinderbilder.s
{}{
Hintergrund: keiner;
Cursor:Standard;
}
#CategoryTree ul
{}{
Rand:0 0 0 17px;
}
#CategoryTree img.s
{}{
Breite:34px;
Höhe: 18px;
}
#CategoryTree .Geöffnete Bilder
{}{
Hintergrund:url(skin3/opened.gif) no-repeat 0 1px;
}
#CategoryTree .Geschlossene Bilder.s
{}{
Hintergrund:url(skin3/closed.gif) no-repeat 0 1px;
}
#CategoryTree .Untergeordnete Bilder.s
{}{
Hintergrund:url(skin3/child.gif) no-repeat 13px 2px;
}
#CategoryTree
{}{
float:left;
Breite:249px;
Grenze: 1 Pixel fest #99BEEF;
Hintergrund:#D2E4FC;
Farbe: erben;
Rand:3px;
Polsterung:3px;
Höhe:600px;
}
4. Verwenden Sie die Ajax-Methode
Verwenden des Systems;
Verwenden von System.Data;
Verwenden von System.Data.SqlClient;
Verwenden von System.Configuration;
mit System.Web;
mit System.Web.Security;
mit System.Web.UI;
mit System.Web.UI.WebControls;
mit System.Web.UI.WebControls.WebParts;
mit System.Web.UI.HtmlControls;
mit AjaxPro;
/**//// <Zusammenfassung>
/// Zusammenfassende Beschreibung für AjaxMethod
/// </summary>
öffentliche Klasse AjaxMethod
{}{
öffentliche AjaxMethod()
{
//
// TODO: Konstruktorlogik hier hinzufügen
//
}
[AjaxMethod(HttpSessionStateRequirement.ReadWrite)]
öffentliches statisches 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)]
öffentliches statisches DataSet GetFormsList(int iCategoryID)
{}{
string sql = string.Format("SELECT * FROM forms WHERE form_category_id = {0}", iCategoryID);
return GetDataSet(sql);
}
öffentliche statische Zeichenfolge ConnectionString = ConfigurationSettings.AppSettings["ConnectionString"].ToString();
öffentliches statisches DataSet GetDataSet(string sql)
{}{
SqlDataAdapter sda = new SqlDataAdapter(sql, ConnectionString);
DataSet ds = new DataSet();
sda.Fill(ds);
if (ds != null)
return ds;
anders
null zurückgeben;
}
}5.sql脚本
falls vorhanden (wählen Sie * aus dbo.sysobjects aus, wobei id = object_id(N'[dbo].[Category]') und OBJECTPROPERTY(id, N'IsUserTable') = 1)
Drop-Tabelle [dbo].[Kategorie]
GO,
wenn vorhanden (wählen Sie * aus dbo.sysobjects aus, wobei id = object_id(N'[dbo].[Forms]') und OBJECTPROPERTY(id, N'IsUserTable') = 1)
Drop-Tabelle [dbo].[Formulare]
GO
CREATE TABLE [dbo].[Kategorie] (
[CategoryID] [int] IDENTITY (1, 1) NOT NULL ,
[CategoryName] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[FatherID] [int] NULL
) AUF [PRIMÄR]
GO
CREATE TABLE [dbo].[Formulare] (
[FormID] [int] IDENTITY (1, 1) NOT NULL ,
[FormName] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[FormUrl] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Form_category_id] [int] NULL ,
[Ziel] [Zeichen] (10) COLLATE Chinese_PRC_CI_AS NULL
) AUF [PRIMÄR]
GEHEN
FUNKTION ERSTELLEN IsLeaf (@cat_id int)
RETURNS int AS
BEGIN
deklarieren @count int
select @count = (select count(*) from Category where FatherID=@cat_id )
wenn (@count=0)
Rückkehr 1
Rückkehr 0
ENDE