这里有一个更好的解释我需要它,我认为已完成大部分内容,但我不能在ViewMode上弄明白。如果有人可以帮助我,谢谢!
我有一个KeyWords列表(概述),我想编辑/插入和查看与特定KeyWord相关的信息或插入一个新的KeyWord。 在这个用于插入,编辑和查看的详细关键字页面上,我必须显示一个树视图,其中包含类别和主题,父节点是类别和 孩子的主题。用户可以检查这些主题中的任何一个(基于复选框的树视图)以将所选关键字与这些主题相关联。 例如对于类别科学我有主题数学,物理,地理,如果我想要关键字几何,我可以检查树视图 数学。在视图模式下,我只需要显示所选主题和类别父级,但是插入和编辑必须显示所有主题并且还要检查主题。
我有这些实体和导航属性以及一个数据示例:
实体选项(OptionId,ParentId,描述,虚拟导航属性KeyWordOptions) KeyWordOption(OptionId,KeywordID,虚拟导航属性选项)
Option Entity
OptionId ParentID Description
1 0 Informatics
2 1 Development
3 0 Architecture
4 1 Systems
5 1 Hardware
6 3 Civil Engineering
7 1 Software
KeyWordOption Entity
OptionId KeywordID ID KeywordDescription
1 8 8 Visual Studio
2 8 2 Autocad
4 2 5 Monitor
5 5 9 Eclipse
2 9
7 8
7 2
7 9
Result Would be for Eclipse keyword(id = 9) at EditMode:
Informatics
Development (checked)
System
Hardware
Software (checked)
Architecture
Civil Engineering
结果将是ViewMode上的Eclipse关键字(id = 9):
Informatics
Development (checked)
Software (checked)
我的代码是:
BindTreeView(OptionList,null);
private void BindTreeView(IEnumerable<Opcion> OptionList, TreeNode parentNode)
{
var nodes = OptionList.Where(x => parentNode == null ? x.ParentID == 0 : x.ParentID == int.Parse(parentNode.Value));
if (mode != FormViewMode.View)
{
foreach (var node in nodes)
{
TreeNode newNode = new TreeNode();
newNode.Text = node.Description.ToString();
newNode.Value = node.OptionID.ToString();
if (parentNode == null)
{
TreeViewOptions.Nodes.Add(newNode);
}
else
{
if (node.KeyWordOptions.Where(c => c.KeywordID == _idKeyWord).Count() > 0)
{
newNode.Checked = true;
parentNode.Expand();
}
parentNode.ChildNodes.Add(newNode);
}
BindTreeView(OptionList, newNode);
}
}
else
{
foreach (var node in nodes)
{
TreeNode newNode = new TreeNode();
newNode.Text = node.Descripcion.ToString();
newNode.Value = node.OpcionID.ToString();
if (parentNode == null && node.KeyWordOptions.Where(c => c.KeywordID == _idKeyWord).Count() > 0)
{
TreeViewOptions.Nodes.Add(newNode);
}
else
{
if (node.KeyWordOptions.Where(c => c.KeywordID == _idKeyWord).Count() > 0)
{
newNode.Checked = true;
parentNode.Expand();
}
parentNode.ChildNodes.Add(newNode);
}
BindTreeView(OptionList, newNode);
}
}
}
}
我不知道如何排除与Nodes
不匹配的KeywordId
答案 0 :(得分:0)
修改强>
也许在你的一个循环中,然后(你应该重构,顺便说一下)?
foreach (var node in nodes.Where
(x => x.KeyWordOptions.Any(k => k.KeywordId == _idKeyWord));