您的位置:首页 > 数据库

如何使用TreeView控件动态读出数据库中的结点字段(已调试通过)

2007-01-15 18:41 573 查看
cs代码如下:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Microsoft.Web.UI.WebControls;

namespace job_17.job17_admingl_bandao
{
/// <summary>
/// admin_index 的摘要说明。
/// </summary>
public class admin_index : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView ModuleTview;

#region "页面初始化"
private void Page_Load(object sender, System.EventArgs e)
{

if(!Page.IsPostBack)
{
this.AddSingleNode(null,"0"); //找出根节点
BindTreeData();

}
this.ModuleTview.SelectedNodeIndex="";
}

private void BindTreeData()
{
Tree tree = new Tree();
tree.BindTree(ModuleTview);
}
#endregion



#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.ModuleTview.Expand += new Microsoft.Web.UI.WebControls.ClickEventHandler(this.ModuleTview_Expand);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion



#region "结点展开时所触发的事件"

private void ModuleTview_Expand(object sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e)
{
TreeNode nd = this.ModuleTview.GetNodeFromIndex(e.Node); //GetNodeFromIndex找到触发事件的节点,即正在展开的节点
if(nd.Nodes[0].NodeData=="") //第一次加载,即只有“正在加载……”这一项
{
this.AddSingleNode(nd,nd.NodeData); //加载子节点
}
}
private void AddSingleNode(TreeNode node,string id)
{
if(node!=null && id!="0")
{
node.Nodes.Clear();//清空节点,主要是把“正在加载……”这一项移除
}
string sql="select * from Tree where ParentID="+id;
job17 cls=new job17();
DataTable dt=cls.ExecuteDataTablesql(sql);
foreach(DataRow row in dt.Rows)
{
TreeNode nd = new TreeNode();
nd.NavigateUrl=row["URL"].ToString(); //设置浏览的网址
nd.NodeData=row["TreeID"].ToString(); //存放节点 ID
nd.Text=row["Title"].ToString(); //设置节点名称
TreeNode child = new TreeNode(); //此节点只作为“nd”展开的依据,并无它意
child.Text="正在加载……";
nd.Nodes.Add(child);
if(node==null|| id=="0")
{
this.ModuleTview.Nodes.Add(nd); //添加至根节点
}
else
{
node.Nodes.Add(nd); //添加子节点
}
}
}
#endregion
}
}



这里面用到一个Tree类,代码如下:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using Microsoft.Web.UI.WebControls;
//using Microsoft.Web.UI.WebControls
namespace job_17
{
/// <summary>
/// Tree 的摘要说明。
/// </summary>
public class Tree
{
private readonly string P_Con=ConfigurationSettings.AppSettings["P_Con"].ToString();
public void BindTree(TreeView treeView)
{
Tree tree = new Tree();
DataTable dataTable = tree.GetTrees();

treeView.Nodes.Clear(); // 清空树

TreeNode rootnode = new TreeNode();
rootnode.Text = "办公平台"; // 给节点绑定显示值
rootnode.NodeData = "0"; // 给节点绑定key值
rootnode.Expanded = true; // 默认根结点为展开
rootnode.NavigateUrl = "OfficeIndex.aspx";
rootnode.Target = "MainFrame";
rootnode.ImageUrl = "Images/people.gif";
//rootnode.ExpandedImageUrl="Images/folder_open.gif";
treeView.Nodes.Add(rootnode);

CreateChildNode(rootnode,dataTable); // 加入所有根结点以下的结点 
}

public void CreateChildNode(TreeNode parentnode,DataTable dataTable)
{
DataRow[] rowList = dataTable.Select("ParentID='" + parentnode.NodeData + "'");//这句是本过程的重点部分,筛选出属于父节点 “node”的子节点集合

foreach(DataRow row in rowList)
{
TreeNode tempnode = new TreeNode();
tempnode.Text = row["Title"].ToString();
tempnode.NodeData = row["TreeID"].ToString();
tempnode.Expanded = true;
//tempnode.ImageUrl="images/tree_leaf.gif";
tempnode.NavigateUrl = row["Url"].ToString();
tempnode.Target = "MainFrame";
parentnode.Nodes.Add(tempnode);
CreateChildNode(tempnode,dataTable);//使用递归调用,遍历整个结点


}
}

public DataTable GetTrees()
{
string sql="select * from Tree";
Tree cls=new Tree();
DataTable dt=cls.ExecuteDataTablesql(sql);

return(dt);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐