Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何返回嵌套的父子集合-C#_C#_Observablecollection - Fatal编程技术网

如何返回嵌套的父子集合-C#

如何返回嵌套的父子集合-C#,c#,observablecollection,C#,Observablecollection,我有下面的代码片段示例。我希望该方法返回父子关系中的嵌套行。例如,我可以有3支球队,例如英格兰队、巴西队和加拿大队,他们应该是顶级家长。然后在每一个团队下,我可以有下面这样的东西 英格兰 乔恩 罗尼 杰拉尔德 巴西 汤姆 内马尔 清单项目1 清单项目2 亚历克斯 加拿大 玩家1 帕耶2 正如您所能做的,一个特定的玩家也可以在他们下面有子项目。这些子项也可以有子项 当前问题 我遇到的问题是,下面的代码只返回England及其子项。巴西和加拿大完全没有回归&我似乎不明白为什么 publ

我有下面的代码片段示例。我希望该方法返回父子关系中的嵌套行。例如,我可以有3支球队,例如英格兰队、巴西队和加拿大队,他们应该是顶级家长。然后在每一个团队下,我可以有下面这样的东西

英格兰

  • 乔恩
  • 罗尼
  • 杰拉尔德
  • 巴西

    • 汤姆
    • 内马尔
      • 清单项目1
      • 清单项目2
    • 亚历克斯
    加拿大

    • 玩家1

    • 帕耶2

    正如您所能做的,一个特定的玩家也可以在他们下面有子项目。这些子项也可以有子项

    当前问题

    我遇到的问题是,下面的代码只返回England及其子项。巴西和加拿大完全没有回归&我似乎不明白为什么

     public static ObservableCollection<ClubsAndPlayers> GetData()
        {
            ObservableCollection<ClubsAndPlayers> clubs = new ObservableCollection<ClubsAndPlayers>();
            DataTable dt = (DataTable)SessionApp.SessionManager.Session["dtMyTask"];
            ClubsAndPlayers parent = null;
            ClubsAndPlayers firstChild = null;
            ClubsAndPlayers secondChild = null;
            ClubsAndPlayers thirdChild = null;
    
            if (!Object.ReferenceEquals(dt, null))
            {
    
                if (dt.Rows.Count <= 0)
                {
                    parent = new ClubsAndPlayers("No Player Available ", "", "", "", "", null);
    
                }
                else
                {
                    for (var i = 0; i < dt.Rows.Count; i++)
                    {
                        string strTaskParentUID = Convert.ToString(dt.Rows[i]["TaskParentUID"]).Trim();
                        string strTaskID = Convert.ToString(dt.Rows[i]["TaskUID"]).Trim();
                        string strTaskName = Convert.ToString(dt.Rows[i]["TaskName"]);
                        string strTaskStartDate = Convert.ToString(dt.Rows[i]["TaskStartDate"]);
                        string strTaskEndDate = Convert.ToString(dt.Rows[i]["TaskEndDate"]);
                        int TaskOutlineLevel = Convert.ToInt32(dt.Rows[i]["TaskOutlineLevel"]);
    
                        if (i == 0 && TaskOutlineLevel == 1)
                        {
                            parent = new ClubsAndPlayers(strTaskName, strTaskID, strTaskStartDate, strTaskEndDate, strTaskParentUID, null);
                        }
                        else
                        {
                            switch (TaskOutlineLevel)
                            {
                                case 2:
                                    firstChild = new ClubsAndPlayers(strTaskName, strTaskID, strTaskStartDate, strTaskEndDate, strTaskParentUID, parent);
                                    if (parent.ID == strTaskParentUID)
                                    {
                                        parent.Items.Add(firstChild);
                                    }
                                    break;
                                case 3:
                                    secondChild = new ClubsAndPlayers(strTaskName, strTaskID, strTaskStartDate, strTaskEndDate, strTaskParentUID, firstChild);
    
                                    if (firstChild.ID == secondChild.ParentId)
                                    {
                                        firstChild.Items.Add(secondChild);
                                    }
                                    break;
                                case 4:
                                    thirdChild = new ClubsAndPlayers(strTaskName, strTaskID, strTaskStartDate, strTaskEndDate, strTaskParentUID, secondChild);
                                    if (secondChild.ID == thirdChild.ParentId)
                                    {
                                        secondChild.Items.Add(thirdChild);
                                    }
                                    break;
                            }
                        }
                    }
                }
            }
    
            clubs.Add(parent);
            return clubs;
        }
    
    公共静态ObservableCollection GetData()
    {
    ObservableCollection clubs=新的ObservableCollection();
    DataTable dt=(DataTable)SessionApp.SessionManager.Session[“dtMyTask”];
    ClubsAndPlayers父项=null;
    ClubsAndPlayers firstChild=null;
    ClubsAndPlayers secondChild=null;
    ClubsAndPlayers thirdChild=null;
    如果(!Object.ReferenceEquals(dt,null))
    {
    
    如果(dt.Rows.Count我不确定我是否正确地解释了您的代码,因为即使字符串
    England
    也没有出现在那里,但是您的问题是否与
    if
    语句中的条件
    I==0
    有关?我看不出您包含的代码如何接近您想要解释的内容o、 数据中似乎有一些隐含的顺序假设,但同时您正在检查节点ID与父ID是否相等,如果它们不相等,则什么也不做。为了弄清楚发生了什么,您需要按照返回数据的特定顺序包含一个示例数据集。您可能需要重新考虑overa在所有方法中,发布的代码看起来非常脆弱。@O.R.Mapper,关于条件1==0,您是对的。删除该条件并移动行clubs.Add(parent);紧接着parent=new ClubsAndPlayers(,,,,,…)在相同条件下解决了问题。