编号 姓名 父级编号 位置 性别 年龄
101001 张三 男 22
101002 李四 101001 左 女 33
101003 王五 101001 右 男 55
101004 赵六 101002 左 女 66
101005 张那 101002 右 男 12
101006 李玉青 101003 左 女 23
101007 赵几凡 101005 左 男 25
这个表里的数据 在asp.net 中用 C# 怎么样实现二叉树的结构,具体是什么来做,最好有源码,本人是新手,在此本人先谢谢各位高人指点?希望高人不吝赐教!
10
20
大致是
public void 完善节点(TreeNode node, string 当前编号) { node.Value = 当前编号; List<string> 子级编号 = 查询数据库("select 编号 from yourTable where 父级编号="" + 当前编号 + """); foreach(string x in 子级编号) { TreeNode n = new TreeNode(); node.Nodes.Add(n); 完善节点(n, x); } }
这就是一个简单的“递归”算法。每当为node的子树集合添加一个新的节点n的时候,递归调用“本人”这个方法,从而完善了节点也就同时完善了子树。
30
假如表数据稍微多点,就会递不动的。
10
2. 生成一个Panel
3. 根据树结构的层次,节点数,算出Panel的宽高
4. 遍历树结构,开画
(1) 从Panel. CreateGraphics 出一个绘图实例来
(2) 根据当前节点该在的位置, DrawRectangle, FillRectangle, DrawText, DrawLine之类的
没有现成的控件可以实现这个图,估计你只想确认这句话而已
10
//加载根节点开始递归调用填充TreeView树形控件
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//获取数据连接语句,并创建数据库连接对象
myConn = DBClass.GetConnection();
CreateDataSet();
InitTree(TreeView1.Nodes, “0”);
}
}
//选择数据库数据建立数据集对象返回数据
public DataSet CreateDataSet()
{
query = “select * from tbTree”;
myAdapter = new SqlDataAdapter(query, myConn);
data = new DataSet();
myAdapter.Fill(data, “tree”);
return data;
}
//从DataSet中取数据建树
//从根节点开始递归调用显示子树
public void InitTree(TreeNodeCollection Nds, string parentId)
{
TreeNode NewNode;
//data为存储建树数据信息的数据集
//用父节点进行筛选数据集中信息
DataRow[] rows = data.Tables[0].Select(“parent_Id=”” + parentId + “””);
foreach (DataRow row in rows)
{
NewNode = new
TreeNode(row[“title”].ToString(), //设置父节点
row[“Files_Id”].ToString(), “images/1.gif”, row[“NavigateUrl”].ToString(), “”);
Nds.Add(NewNode);
InitTree(NewNode.ChildNodes, row[“Files_Id”].ToString());//添加子节点
}//CodeGo.net/
}
//点击节点跳转到指定页面
protected void TreeView1_SelectedNodeChanged1(object sender, EventArgs e)
{
int nodeId = Convert.ToInt32(TreeView1.SelectedValue);//获取TreeView控件选择的值
string url = DBClass.GetUrl(nodeId);//获取指定地址
Response.Redirect(url.ToString());//转到指定页
}
//从数据库中获取控件中某个节点的关联地址
public static string GetUrl(int filesId)
{
//获得url地址
SqlConnection myConnection = GetConnection();
SqlCommand myCommand = new SqlCommand(“GetUrl”, myConnection);
myCommand.CommandType = CommandType.StoredProcedure;
//添加参数
SqlParameter FilsesId = new SqlParameter(“@FilesId”, SqlDbType.Int, 4);
FilsesId.Value = filesId;
myCommand.Parameters.Add(FilsesId);
//添加参数
SqlParameter Url = new SqlParameter(“@Url”, SqlDbType.NVarChar, 100);
Url.Direction = ParameterDirection.Output;
myCommand.Parameters.Add(Url);
//执行存储过程
myConnection.Open();
myCommand.ExecuteNonQuery();
string url = Url.Value.ToString();
myCommand.Dispose();
myConnection.Dispose();
return url;
}