首页  ·  知识 ·  云计算
TreeView中动态增加结点
佚名  www.xxyyhh.com    编辑:dezai  图片来源:网络
在asp.net2.0中,要动态从数据库中取出内容,动态增加结点,其实不难,比如以SQLSERVER2000的PUBS数据库为例子,要以树型列表方式,取出

在asp.net 2.0中,要动态从数据库中取出内容,动态增加结点,其实不难,比如以SQL SERVER 2000的PUBS数据库为例子,要以树型列表方式,取出作者,做为根结点,然后取出每位作者写过什么书,作为子结点,可以这样 

<%@ Page Language="C#"%> 
<%@ Import Namespace="System.Data"%> 
<%@ Import Namespace="System.Data.SqlClient"%> 
<%@ Import Namespace="System.Configuration"%> 

 

xmlns="http://www.w3.org/1999/xhtml"> 
 
Dynamic Population of the TreeView Control 
 
void Node_Populate(object sender, 
System.Web.UI.WebControls.TreeNodeEventArgs e) 

if(e.Node.ChildNodes.Count == 0) 

switch( e.Node.Depth ) 

case 0: 
FillAuthors(e.Node); 
break; 
case 1: 
FillTitlesForAuthors(e.Node); 
break; 




void FillAuthors(TreeNode node) 

string connString = System.Configuration.ConfigurationSettings. 
ConnectionStrings["NorthwindConnnection"].ConnectionString; 
SqlConnection connection = new SqlConnection(connString); 
SqlCommand command = new SqlCommand("Select * From 
authors",connection); 
SqlDataAdapter adapter = new SqlDataAdapter(command); 
DataSet authors = new DataSet(); 
adapter.Fill(authors); 
if (authors.Tables.Count > 0) 

foreach (DataRow row in authors.Tables[0].Rows) 

TreeNode newNode = new 
TreeNode(row["au_fname"].ToString() + " " + 
row["au_lname"].ToString(), 
row["au_id"].ToString()); 
newNode.PopulateOnDemand = true; 
newNode.SelectAction = TreeNodeSelectAction.Expand; 
node.ChildNodes.Add(newNode); 




void FillTitlesForAuthors(TreeNode node) 

string authorID = node.Value; 
string connString = System.Configuration.ConfigurationSettings. 
ConnectionStrings["NorthwindConnnection"].ConnectionString; 
SqlConnection connection = new SqlConnection(connString); 
SqlCommand command = new SqlCommand("Select T.title, 
T.title_id From titles T" + 
" Inner Join titleauthor TA on 
T.title_id = TA.title_id " + 
" Where TA.au_id = ’" + authorID + "’", connection); 
SqlDataAdapter adapter = new SqlDataAdapter(command); 
DataSet titlesForAuthors = new DataSet(); 
adapter.Fill(titlesForAuthors); 
if (titlesForAuthors.Tables.Count > 0) 

foreach (DataRow row in titlesForAuthors.Tables[0].Rows) 

TreeNode newNode = new TreeNode( 
row["title"].ToString(), row["title_id"].ToString()); 
newNode.PopulateOnDemand = false; 
newNode.SelectAction = TreeNodeSelectAction.None; 
node.ChildNodes.Add(newNode); 




 
 
 
 

 
CollapseImageUrl="Images/open.gif" 
OnTreeNodePopulate="Node_Populate" ID="tvwauthors"> 
 
Value="0"/> 
 
 
 
 
 
 
其中,注意ontreenodepopulate事件,是在展开树的结点时发生的,这里定义了自定义的NODE_POPULATE,在node_populate中,检查当前结点的深度,如果是0,就是根结点,于是就调用FillAuthors过程,取出所有的作者,如果深度是1,则是叶子结点,调用FillTitlesForAuthors过程。其中,要注意它们中的动态建立树结点的过程,如: 
TreeNode newNode = new TreeNode(row["au_fname"].ToString() + " " + 
row["au_lname"].ToString(), 

row["au_id"].ToString()); 

newNode.PopulateOnDemand = true; 

newNode.SelectAction = TreeNodeSelectAction.Expand; 

node.ChildNodes.Add(newNode); 
其中, popluateondemand属性表明,该结点会动态扩展。 

本文作者:佚名 来源:www.xxyyhh.com
CIO之家 www.ciozj.com 微信公众号:imciow
    >>频道首页  >>网站首页   纠错  >>投诉
版权声明:CIO之家尊重行业规范,每篇文章都注明有明确的作者和来源;CIO之家的原创文章,请转载时务必注明文章作者和来源;
延伸阅读
也许感兴趣的
我们推荐的
主题最新
看看其它的