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 +=" ";
}
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 +=" ";
}
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);
}
}
}