日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(无限级、递归)DropDownList显示树形分类

發布時間:2024/4/11 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (无限级、递归)DropDownList显示树形分类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡單無限級表結構:id,name,pid。

本篇將展示如何在DropDownList控件顯示一個漂亮的樹結構。

1.以下我們建立無限級樹的表結構

--星辰變的修真等級表
CREATE?TABLE XianMO
(
XianMoID
INT?NOT?NULL ,
XianMoLevel
VARCHAR(50) NOT?NULL?DEFAULT(''),
XianMoParentID
INT?NOT?NULL?DEFAULT(0)
)
GO
--索引
CREATE?NONCLUSTERED?INDEX IX_XianMo ON XianMo(XianMoID)
GO

?

2.有了表結構,我們將添加一些數據。^_^

INSERT?INTO XianMo(XianMoID,XianMoLevel,XianMoParentID) SELECT?1,'凡人',0
UNION?ALL?SELECT?2,'修真者',0
UNION?ALL?SELECT?3,'后天境界',2
UNION?ALL?SELECT?4,'先天境界(四九小天劫)',2
UNION?ALL?SELECT?5,'金丹期',2
UNION?ALL?SELECT?6,'元嬰期(六九大天劫)',2
UNION?ALL?SELECT?7,'洞虛期',2
UNION?ALL?SELECT?8,'空冥期',2
UNION?ALL?SELECT?9,'渡劫期(九九重劫)',2
UNION?ALL?SELECT?10,'大乘期',2
UNION?ALL?SELECT?11,'仙人',0
UNION?ALL?SELECT?12,'散仙',11
UNION?ALL?SELECT?13,'天仙',11
UNION?ALL?SELECT?14,'金仙',11
UNION?ALL?SELECT?15,'玄仙',11
UNION?ALL?SELECT?16,'仙帝',11
UNION?ALL?SELECT?17,'神人',0
UNION?ALL?SELECT?18,'下級神人',17
UNION?ALL?SELECT?19,'中級神人',17
UNION?ALL?SELECT?20,'上級神人',17
UNION?ALL?SELECT?21,'天神',0
UNION?ALL?SELECT?22,'下部天神',21
UNION?ALL?SELECT?23,'中部天神',21
UNION?ALL?SELECT?24,'上部天神',21
UNION?ALL?SELECT?25,'神王',0
UNION?ALL?SELECT?26,'天尊',0
UNION?ALL?SELECT?27,'鴻蒙',0
GO

?

3.創建一個存儲過程,我們在這里就已經把樹結構完整的展示出來了。

-- =============================================
--
Author: Star Studio
--
Create date: 2010-09-10
--
Description: Tree In DropDownList
--
=============================================
ALTER?PROCEDURE[dbo].[GetTree]
@tableName?VARCHAR(100),--表名
@idName?VARCHAR(100),--id字段名
@className?VARCHAR(100),--class字段名
@pidName?VARCHAR(100),--父id字段名
@pidValue?INT,--指定此次構造樹的根節點
@idExcepted?INT--此次構造的樹,將排除顯示的節點及其子節點。這在修改節點的父關系時很有用。你不可以指定某節點的老爸是自己或自己的兒子吧。所以這時就要屏蔽掉自己及子節點
AS
BEGIN
SET NOCOUNT ON;
DECLARE?@Level?INT
DECLARE?@strTree?VARCHAR(8000)
DECLARE?@t?TABLE(id INT,class VARCHAR(100), pid INT)
DECLARE?@ttemp?TABLE(id INT,class VARCHAR(100),pid INT,lev INT,codeid VARCHAR(8000))

SET?@Level=0
SET?@strTree='┊┈┈'

INSERT?INTO?@t?EXEC('SELECT '+@idName+' AS id,'+@className+' AS class,'+@pidName+' AS pid FROM '+@tableName+'')   --排除的節點有可能是根節點
INSERT?INTO?@ttemp?SELECT id,@strTree+class,pid,@level,right(10000+id,4) FROM@tWHERE pid=@pidValueAND id<>@idExcepted
WHILE?@@rowcount>0--一層層遞歸構造排序字段codeid
BEGIN
SET?@strTree=replace(@strTree,'','')
SET?@strTree=@strTree+'┊┈┈'
SET?@level=@level+1

IF(@idExcepted=0)
BEGIN
INSERT?@ttemp?SELECT a.id,@strTree+a.class,a.pid,@level,b.codeid+right(10000+a.id,4) FROM@t a,@ttemp b
WHERE a.pid=b.id AND b.lev=@level-1
END
ELSE
BEGIN        --排除的節點是某個子節點
INSERT?@ttemp?SELECT a.id,@strTree+a.class,a.pid,@level,b.codeid+right(10000+a.id,4) FROM@t a,@ttemp b
WHERE a.pid=b.id AND b.lev=@level-1AND b.id<>@idExcepted
END
END   --只要按codeid排列結果集,就能得到正確完整的樹結構
SELECT a.id,a.pid,b.class,b.lev,b.codeid FROM?@t a,@ttemp b WHERE a.id=b.id ORDERBY b.codeid
END
GO
--事例演示
exec gettree 'XianMo','xianmoid','xianmolevel','xianmoparentid',0,11

?

演示事例一及其結果集:

--不排除任何一個節點
exec gettree 'XianMo','xianmoid','xianmolevel','xianmoparentid',0,0

?

?

演示事例二及其結果集:

--排除仙人節點
exec gettree 'XianMo','xianmoid','xianmolevel','xianmoparentid',0,11

?

看了以上兩圖,你應該知道,該存儲過程的原理是通過遞歸構造一個排序字段codeid,然后根據codeid排序就得到完整的屬性排列了。

?

4.接下來只要把數據放入DropDownList,就能顯示一顆漂亮的樹了。

<!--DropDownListTree.aspx-->
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DropDownListTree.aspx.cs" Inherits="_Default"%>

<!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>DropDownList顯示樹結構</title>
<style type="text/css">
#TreeBlock{width:200px;}
#TreeBlock #ddlXianMoTree{background
-color:#FFAA2B; }
</style>
</head>
<body>
<form id="form1" runat="server">
<div id="TreeBlock">
<asp:DropDownList ID="ddlXianMoTree" runat="server"></asp:DropDownList>
</div>
</form>
</body>
</html>

?

//DropDownListTree.aspx.cs
using System;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Data.SqlClient;
using WnetSoft.Common.DBHelper;

publicpartialclass _Default : System.Web.UI.Page
{
protectedvoid Page_Load(object sender, EventArgs e)
{
SqlParameter[] SqlParamList
={
SqlHelper.MakeInParam(
"@tableName",SqlDbType.VarChar,100,"XianMo"),
SqlHelper.MakeInParam(
"@idName",SqlDbType.VarChar,100,"XianMoID"),
SqlHelper.MakeInParam(
"@className",SqlDbType.VarChar,100,"XianMoLevel"),
SqlHelper.MakeInParam(
"@pidName",SqlDbType.VarChar,100,"XianMoParentID"),
SqlHelper.MakeInParam(
"@pidValue",SqlDbType.Int,10,0),
SqlHelper.MakeInParam(
"@idExcepted",SqlDbType.Int,10,0)
};
ddlXianMoTree.DataSource
= SqlHelper.ExecuteReader(SqlHelper.connString, CommandType.StoredProcedure, "GetTree", SqlParamList);
ddlXianMoTree.DataTextField
="class";
ddlXianMoTree.DataValueField
="id";
ddlXianMoTree.DataBind();
ddlXianMoTree.Items.Insert(
0, new ListItem("--根節點--", "0"));
}
}

?

有點遺憾是,我傳入XianMoID,XianMoLevel字段,返回的結果是id,class字段。

?

以上就是本篇內容。?

?

?

總結

以上是生活随笔為你收集整理的(无限级、递归)DropDownList显示树形分类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。