SQL中的数据 与 树 的问题,求高人指点?谢谢

.Net技术 码拜 4年前 (2016-07-12) 269次浏览
表: member
编号 姓名 父级编号 位置 性别 年龄
101001 张三                           男           22
101002 李四 101001            左           女           33
101003 王五 101001           右           男           55
101004 赵六 101002            左            女            66
101005 张那 101002            右            男            12
101006 李玉青 101003           左           女           23
101007 赵几凡 101005            左           男           25
这个表里的数据 在asp.net 中用 C# 怎么样实现二叉树的结构,具体是什么来做,最好有源码,本人是新手,在此本人先谢谢各位高人指点?希望高人不吝赐教!
解决方案

10

http://blog.sina.com.cn/s/blog_4961e0780100bl34.html
就是生成树结构
但是你保证每个人下面最多有2个人吗,假如超出2个人,就是树了,不是二叉树

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

1. 先生成那个树结构
2. 生成一个Panel
3. 根据树结构的层次,节点数,算出Panel的宽高
4. 遍历树结构,开画
(1) 从Panel. CreateGraphics 出一个绘图实例来
(2) 根据当前节点该在的位置, DrawRectangle, FillRectangle, DrawText, DrawLine之类的
没有现成的控件可以实现这个图,估计你只想确认这句话而已

10

使用TreeView控件实现树形系统导航
//加载根节点开始递归调用填充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;
}


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明SQL中的数据 与 树 的问题,求高人指点?谢谢
喜欢 (0)
[1034331897@qq.com]
分享 (0)