在Northiwind里,有一张雇员表,雇员关系为层次化的,所以要用树来显示:
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 System.Data.SqlClient;

namespace WebApplication1
{
/// <summary>
/// WebForm5 的摘要说明。
/// </summary>
public class WebForm5 : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
Microsoft.Web.UI.WebControls.TreeNode rootnode;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
SqlConnection con=new SqlConnection("server=GOODBABY;uid=sa;password=goodbaby;database=Northwind");
DataSet myDS=new DataSet();
SqlDataAdapter mySqlDAP=new SqlDataAdapter("select EmployeeID,ReportsTo,LastName from Employees",con);
try
{
con.Open();
mySqlDAP.Fill(myDS,"Employees");
DataTable myDataTable=myDS.Tables["Employees"];
myDS.Relations.Add("SelfReferencing",myDataTable.Columns["EmployeeID"],myDataTable.Columns["ReportsTo"],false);
foreach(DataRow Item in myDataTable.Rows)
{
if(Item.IsNull("ReportsTo"))
{
Microsoft.Web.UI.WebControls.TreeNode treenode=new Microsoft.Web.UI.WebControls.TreeNode();
treenode.Text=(string)Item["LastName"];
rootnode=treenode;
TreeView1.Nodes.Add(treenode);
ForTree(treenode,Item);
break;
}
}
}
catch(Exception ex)
{
throw ex;
}
}


private void ForTree( Microsoft.Web.UI.WebControls.TreeNode node,DataRow row)
{
if(!row.IsNull("ReportsTo"))
{
Microsoft.Web.UI.WebControls.TreeNode tempNode=new Microsoft.Web.UI.WebControls.TreeNode();
tempNode.Text=(string)row["LastName"];
node.Nodes.Add(tempNode);
foreach(DataRow Item in row.GetChildRows("SelfReferencing"))
{
ForTree(tempNode,Item);
}
}
else
{
Microsoft.Web.UI.WebControls.TreeNode tempNode;
tempNode=node;
foreach(DataRow Item in row.GetChildRows("SelfReferencing"))
{
ForTree(tempNode,Item);
}
}
}

Web 窗体设计器生成的代码
}
}
效果:

这实际上是一棵树,这里用深度递归遍历他,也就是说如果你能构建一棵树,那么几可以从根节点遍历他,更通用的一种模式是声明一个节点的接口,在他下面派生子类,那么象有子节点的节点就可以这样MyInterfaceForBase[] myInterfaceforBase保持向子节点的引用。递归遍历通常有两种方法,一种是在外面,一种是把他写到节点对象自身。终之对树形结构的遍历是很有趣的。
入门学习,希望大家指正。
效果:
这实际上是一棵树,这里用深度递归遍历他,也就是说如果你能构建一棵树,那么几可以从根节点遍历他,更通用的一种模式是声明一个节点的接口,在他下面派生子类,那么象有子节点的节点就可以这样MyInterfaceForBase[] myInterfaceforBase保持向子节点的引用。递归遍历通常有两种方法,一种是在外面,一种是把他写到节点对象自身。终之对树形结构的遍历是很有趣的。
入门学习,希望大家指正。
浙公网安备 33010602011771号