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