如何使用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);
}
}
}
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);
}
}
}
相关文章推荐
- ZODB入门 -- 如何通过面向对象的动态语言 Python 使用对象数据库
- 如何使用VS.NET调试数据库存储过程
- 解决如何通过循环来使用数据库的值设置jsp的select标签的option值
- 如何通过使用 SQL Server 中的 Detach 和 Attach 函数将 SQL Server 数据库移到新位置
- Hibernate的注释该如何使用? 属性 数据库中 字段 实体 级联删除
- 如何使用VS.NET调试数据库存储过程
- java的UUID类型字段,如何通过jdbc进行数据库的CRUD
- 如何在macosx上通过源码安装bochs2.4.6并使用peter-bochs进行调试
- 在使用Hibernate时,因为一个查询需要更多的表连接而要使用SQL来解决性能问题。然而返回的结果集中包含了没有映射的Entity类中的表字段,在这个SQL中还有使用如何将层次关系的父子结点显示为横行
- java的UUID类型字段,如何通过jdbc进行数据库的CRUD
- VS2008下如何调试matlab使用的动态链接库
- 使用MFC+ADO+SQL2008(Access)如何动态创建数据库和表
- Android如何使用SQLiteOpenHelper在已经存在的数据库中插入一个字段
- 如何通过使用 SQL Server 中的 Detach 和 Attach 函数将 SQL Server 数据库移到新位置
- c++builder上使用TIDTCPServer和TIDTCPClient进行简单通信,如何通过代码动态设置TIDTCPServer的Bindings属性。
- GDB调试器的简单使用(通过实例一步一步的说明该如何去调试)
- 如何使用VS.NET调试数据库存储过程 (转)
- 使用dao时,如何同时使用动态表名和过滤字段?
- 如何使用VS.NET调试数据库存储过程 longrujun [原作]
- 如何使用VS.NET调试数据库存储过程 longrujun [原作]