如何将子节点分组到相应的父节点?(涉及IT技术)

3

我对C#/ ASP.Net还比较陌生。现在我有一个项目,涉及从两个SQL表绑定树形结构。我做了一些功课..然后我成功地绑定了我的树形结构。首先这是我的表格。我的目标是将子节点分组到其对应的父节点。但发生的情况是每个子节点都放入了所有父节点中。我知道我已经接近成功了,但卡住了。

tblCategory(parentnodes)
categoryID(varchar(20))
Category(varchar(50))
active(char(1))

tblDocuments(childnodes)
id(int)
description(varchar(100))
title(varchar(20))
categoryid(varchar(20))

tblcategory.categoryid = tbldocuments.categoryid

这是我的代码。

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            //bindtree
            DataTable dtCategoryNodes = new DataTable();
            dtCategoryNodes = content.dtCategoryNodes();
            dtCategoryNodes.AcceptChanges();

            DataTable dtNodes = new DataTable();
            dtNodes = content.GetNodes();
            dtNodes.AcceptChanges();

            TreeNode CategoryNode = null;
            for (int i = 0; i < dtCategoryNodes.Rows.Count; i++)

            {
                string categoryid = dtCategoryNodes.Rows[i]["CategoryID"].ToString();

                CategoryNode = new TreeNode(dtCategoryNodes.Rows[i]
                "CATEGORY"].ToString());

                CategoryNode.Collapse();
                for (int j = 0; j < dtNodes.Rows.Count; j++)
                {   string parentid = dtNodes.Rows[j]["parentid"].ToString();

                    TreeNode childNode = new TreeNode(dtNodes.Rows[j]["TITLE"].ToString());
                    CategoryNode.ChildNodes.Add(childNode);


                }        

                tvContents.Nodes.Add(CategoryNode);
                tvContents.DataBind();
              }
            }
          }   

但是这里出现了一个问题。以下是我的树发生的情况。
a. Crift Items 
 a.1Configuring DCOM 

b.Internal Refresher Trainings 
 b.1Configuring DCOM 

c. Product/Process Update 
 c.1 Configuring DCOM 

d.Promotions/Discounts 
 d.1 Configuring DCOM 

e.QA Update 
 e.1 Configuring DCOM 

以下是我的数据 tbldocument id 标题 文件 类别ID 1 配置 DCOM DCOM.doc PRODUPDT

注:此文档为IT技术相关内容。
tblCategory
CategoryID  Category                    active
CRIFT   Crift Items                 Y
IRTRAIN Internal Refresher Trainings    Y
PRODUPDT    Product/Process Update          Y
PROMODISCS  Promotions/Discounts            Y
QAUPDT  QA Update                   Y

感谢所有的评论和建议!提前感谢!
1个回答

1
替换
for (int j = 0; j < dtNodes.Rows.Count; j++)
{   string parentid = dtNodes.Rows[j]["parentid"].ToString();
    TreeNode childNode = new TreeNode(dtNodes.Rows[j]["TITLE"].ToString());
    CategoryNode.ChildNodes.Add(childNode);
}

With

foreach(DataRow drChild in dtNodes.Select("CategoryID=" + categoryid))
{   
    TreeNode childNode = new TreeNode(drChild["TITLE"].ToString());
    CategoryNode.ChildNodes.Add(childNode);
}

嗨,Arun!很抱歉回复晚了……谢谢你的建议。我已经尝试了,但我觉得我的代码还有一些问题。这是我做的。 - Joel
for (int i = 0; i < dtCategoryNodes.Rows.Count; i++) { CategoryID = dtCategoryNodes.Rows[i]["CategoryID"].ToString(); CategoryNode = new TreeNode(dtCategoryNodes.Rows[i]["CATEGORY"].ToString()); CategoryNode.Collapse(); dtChildNodes = content.GetChildNodes(CategoryID);for (int j = 0; j < dtChildNodes.Rows.Count; j++) { string parentid = dtChildNodes.Rows[j]["parentid"].ToString(); string url = dtChildNodes.Rows[j]["url"].ToString(); ChildNode = new TreeNode(dtChildNodes.Rows[j]["TITLE"].ToString()); CategoryNode.ChildNodes.Add(ChildNode); } tvContents.Nodes.Add(CategoryNode);} - Joel
你是否遇到了错误或不正确的行为?假设一切都按照预期进行,并且您已经声明了变量,那么您的代码似乎是没有问题的。 - Arun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接