当前位置:编程学习 > C#/ASP.NET >>

如何根据数据中的字段生成树

系统研发部
    开发1组
    开发2组
    开发3组

美工部
   动画组
   界面组

市场开拓部 --------------------编程问答-------------------- 递归 --------------------编程问答-------------------- 还有是怎样设计数据表比较好一点呢..有没具体的方法? --------------------编程问答-------------------- 只有两级?01
0101
02
0201
可以这样存ID --------------------编程问答-------------------- 是根据SQL字段生成TREEVIEW吗?
不好意思,刚才看见个树,习惯性打了个递归,因为最近有几个人都问我这个问题,有点神经质了。

如果你想问的就是这个,那么一般数据库里一个RowID为主键,一个PRowID是父节点的ID,PRowID默认为-1,-1就是代表根,PRowID对应的就是父节点的RowID

下面是代码,请简单修改数据库连接和树显示的内容就可以使用。

   protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            AddTreeView(-1, (TreeNode)null);
        }
    }

    protected void AddTreeView(Int64 ID, TreeNode tn)
    {
        SqlConnection objConn = new SqlConnection(ConfigurationManager.ConnectionStrings["MaterialDBConnectionString"].ToString().Trim());

        String strCmd = "select MaterialName,RowID from MaterialCodeDef where PRowID=" + ID;

        SqlCommand objCmd = new SqlCommand();

        objCmd.Connection = objConn;
        objConn.Open();
        objCmd.CommandText = strCmd;

        SqlDataReader objDR = objCmd.ExecuteReader();

        while (objDR.Read())
        {
            if (tn == null)
            {
                TreeNode myNode = new TreeNode();
                myNode.Text = objDR["MaterialName"].ToString().Trim();
                myNode.Value = objDR["RowID"].ToString().Trim();
                TreeView1.Nodes.Add(myNode);
                AddTreeView(Int64.Parse(objDR["RowID"].ToString().Trim()), (TreeNode)myNode);
            }
            else
            {
                TreeNode myNode1 = new TreeNode();
                myNode1.Text = objDR["MaterialName"].ToString().Trim();
                myNode1.Value = objDR["RowID"].ToString().Trim();
                tn.ChildNodes.Add(myNode1);
                AddTreeView(Int64.Parse(objDR["RowID"].ToString().Trim()), (TreeNode)myNode1);
            }
        }

        objDR.Close();
        objConn.Close();
    } --------------------编程问答-------------------- 前段时间正好做了个的,再另一个帖子里也回过
复制过来给LZ好了:
做点简单的修改就能用

private void BindTree()
{
DataTable dt = 数据源; //自己去指定。。。
DataView dv = new DataView(dt);
dv.RowFilter = "ParentID is null";
foreach (DataRowView drv in dv)
{
TreeNode node = new TreeNode();
node.Text = drv["Name"].ToString();
node.Value = drv["ID"].ToString();
node.ImageUrl = "~/images/folder.GIF";
node.Expanded = true;
this.tvRight.Nodes.Add(node);
AddReplies(dt,node);
}
}

//递归
private void AddReplies(DataTable dt, TreeNode node)
{
DataView dv = new DataView(dt);
dv.RowFilter = "ParentID='" + node.Value + "'";
foreach (DataRowView row in dv)
{
TreeNode replyNode = new TreeNode();
replyNode.Text = row["Name"].ToString();
replyNode.Value = row["ID"].ToString();
replyNode.Expanded = false;
node.ChildNodes.Add(replyNode);
AddReplies(dt,replyNode);
}
} --------------------编程问答-------------------- 5楼的帮上大忙了
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,