• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
yoxking
yoxking Tech.
博客园    首页    新随笔    联系   管理    订阅  订阅

多级分类树

多级分类树

Posted on 2004-12-29 13:08 chating 阅读(650) 评论(0)  编辑 收藏

数据库:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Board]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Board]
GO

CREATE TABLE [dbo].[Board] (
 
[BoardId] [int] IDENTITY (1, 1) NOT NULL ,
 
[PareId] [int] NOT NULL ,
 
[BoardName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
 
[BoardMark] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL 
) 
ON [PRIMARY]
GO


得到树的深度存储过程:

CREATE PROCEDURE dbo.SpBoardTreeDepth
AS
   
declare @level int
   
declare @t table(boardid int,pareid int,boardname varchar(50),level int)
   
set @level = 1
   
insert into @t select boardid,pareid,boardname,@level from board where pareid = 0
   
while(@@rowcount>0)
      
begin
        
set @level=@level+1
        
insert into @t
          
select a.boardid,a.pareid,a.boardname,@level from board a
          
join @t b on a.pareid = b.boardid where b.level=@level-1
      
end
      
select boardid,pareid,boardname,level from @t
      
RETURN
GO


绑定到DropDownList控件

protected System.Web.UI.WebControls.DropDownList Drp;

private void Page_Load(object sender, System.EventArgs e)
{
 
if(!Page.IsPostBack){
  DataTable dt 
= Popo.Dal.SqlHelp.LoadData("SpBoardTreeDepth",null).Tables[0];
  
string rootId = "0";
  CreateChild(rootId,dt);
 }

}


void CreateChild(string id ,DataTable dt){
 
if(dt.Rows.Count == 0)
  
return;
 
for(int i=0;i<dt.Rows.Count;i++){
  DataRow dr 
= dt.Rows[i];
  
if(dr["pareid"].ToString() == id){
   
string deep = "" ;
   
for(int j=0;j<System.Convert.ToInt32(dr["level"].ToString())-1;j++){
    deep 
+="&nbsp;&nbsp;";
   }

   deep 
+= "┣ ";
   Drp.Items.Add(
new ListItem(HttpUtility.HtmlDecode(deep+dr["boardname"].ToString()),dr

[
"boardid"].ToString()));
   
string bId = dr["boardid"].ToString();
   dt.Rows.Remove(dt.Rows[i]);
   CreateChild(bId,dt);
   CreateChild(id,dt);
  }

 }

}



显示:

 


绑定到TreeView控件:


private System.Windows.Forms.TreeView treeView1;

public Form1()
{
 
//
 
// Windows 窗体设计器支持所必需的
 
//
 InitializeComponent();

 
//
 
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
 
//

 DataTable dt 
= Popo.Dal.SqlHelp.LoadData("SpBoardTreeDepth",null).Tables[0];
 
string rootId = "0";
 CreateChild(treeView1.Nodes,rootId,dt);
}


void CreateChild(TreeNodeCollection nodeCollection,string id ,DataTable dt){
 
if(dt.Rows.Count == 0)
  
return;
 
for(int i=0;i<dt.Rows.Count;i++){
  DataRow dr 
= dt.Rows[i];
  
if(dr["pareid"].ToString() == id){
   
string deep = "" ;
   
for(int j=0;j<System.Convert.ToInt32(dr["level"].ToString())-1;j++){
    deep 
+="&nbsp;&nbsp;";
   }

   deep 
+= "┣ ";
   TreeNode node 
= new TreeNode(dr["boardname"].ToString());
   node.Tag 
= dr["boardid"].ToString();
   nodeCollection.Add(node);
   
string bId = dr["boardid"].ToString();
   dt.Rows.Remove(dt.Rows[i]);
   CreateChild(node.Nodes,bId,dt);
   CreateChild(nodeCollection,id,dt);
  }

 }

}


posted @ 2005-03-19 22:02  yoxking   阅读(381)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3